我刚刚开始流星的冒险,所以我有一个小问题数据库结构如下所示:用户有角色,角色有子程序。我想检查用户是否至少有一个子例程,它是作为数组的函数参数。这是代码:
userHasAllPermissions: function(permissionArray) {
var result = false;
var user = Meteor.user();
if (!user) return false;
permissionArray = ["Permission 0", "Permission 1", "Permission 99999"];
var rolesToSearch = _.keys(user.roles);
for (var i = 0; i < rolesToSearch.length; i++) {
var role = Meteor.roles.findOne({name: rolesToSearch[i]});
var subrole = role.subRoles;
for(var k = 0; k < permissionArray.length; k++)
{
if(_.include(_.some(subrole,permissionArray[k]))){
result = true;
console.log("Ok");
break;
}
console.log("Error")
}
}
return result;
}
好的,马上:
- 在第5行,您似乎覆盖了
permissionArray
函数参数。你确定要那样做吗 - user.roles是
Object
还是Array
?我希望有一个数组,但_.keys(user.roles)
没有意义 - 使用
$in
mongo查询来获取子例程会更有效,然后可以对生成的游标进行迭代。事实上,也许您可以使用两个$in
查询运算符来立即获得结果:Meteor.roles.find({name:{$in:rolesToSearch}, 'subRoles.$':{$in: permissionArray}})
这很难测试,但我猜您可以找到这样的查询-如果它返回结果-应该让您的函数返回true
user.role是Ocject,user.role具有子角色数组