我刚刚开始流星的冒险,所以我有一点问题 数据库结构如下所示: 用户有角色,角色有子角色。我想检查用户是否至少有一个subrole,它是一个函数参数作为数组。 这是代码:
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;
}
答案 0 :(得分:0)
好的,马上蝙蝠:
permissionArray
函数参数。你确定要这么做吗?Object
还是Array
?我期待一个数组,但是_.keys(user.roles)
没有意义。$in
mongo查询获取子角色会更有效率,然后可以迭代生成的游标。事实上,也许您可以使用两个$in
查询运算符来立即获得结果:Meteor.roles.find({name:{$in:rolesToSearch}, 'subRoles.$':{$in: permissionArray}})
很难对此进行测试,但我猜测您可以找到类似的查询 - 如果它返回结果 - 应该让你的函数返回true
。答案 1 :(得分:0)
user.roles是Object,user.roles具有SubRoles数组