我对Sync_gateway的角色有疑问。
我的sync_functionmissing role上抛出requireRole("adminSync");错误。

我正在使用配置如下的用户admin1进行访问:

  "name": "admin1",
  "all_channels": {},
  "passwordhash_bcrypt": "**************",
  "explicit_roles": {
    "adminSync": 1
  },
  "rolesSince": {
    "adminSync": 1
  }


我也将角色配置为:

{
  "name": "adminSync",
  "admin_channels": {
    "CH_HORAS": 1,
    "CH_PERSONAS": 1,
    "CH_PROYECTOS": 1
  },
  "all_channels": {
    "CH_HORAS": 1,
    "CH_PERSONAS": 1,
    "CH_PROYECTOS": 1
  }
}


对这个错误有任何想法吗?

谢谢。

最佳答案

回覆,
我发现出了什么问题

变量realUserCtx.roles是一个映射,因此根据需要比较两个数组的requireRole(..),它始终返回false。

因此,在比较之前,我需要更改src / channels / sync_runner.go的源代码以将此映射转换为数组。

function mapToArray(mapObject){
        var _array = [];
        if(mapObject){
            for (var property in mapObject) {
                _array.push(property);
            }
        }
        return _array;
    }


然后..

function requireRole(roles) {
    ...
    if (!anyInArray(mapToArray(realUserCtx.roles), roles))
    }


如果您需要更多说明,可以通过私人信息与我联系。
祝好运

07-27 13:42