我对Sync_gateway的角色有问题。我的sync_function在requireRole("adminSync");上抛出一个missing role错误。
我使用配置如下的用户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
}
}知道这个错误吗??
谢谢。
发布于 2014-06-11 21:39:48
我发现出了什么问题,
变量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))
}如果你需要更多的解释,你可以私下联系我。祝好运
发布于 2014-06-09 19:31:26
我也在解决同样的问题。我查看了sync_gateway源代码src/channels/sync_runner.go并找到了requireRole定义,即:
function requireRole(roles) {
if (!shouldValidate) return;
roles = makeArray(roles);
if (!anyInArray(realUserCtx.roles, roles))
throw({forbidden: "missing role"});
}尽管如此,我还是尝试在我的同步函数中添加这部分代码:
console.log(Array.isArray(realUserCtx.roles));..and,它返回假。realUserCtx.roles不是一个数组,而是一个函数,我不知道这个函数体内有什么。
我希望它能帮助我们找到解决办法。
https://stackoverflow.com/questions/24122742
复制相似问题