Meteor比较数组中的元素

时间:2015-04-03 08:31:18

标签: arrays templates meteor permissions roles

我刚刚开始流星的冒险,所以我有一点问题 数据库结构如下所示: 用户有角色,角色有子角色。我想检查用户是否至少有一个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;
}

2 个答案:

答案 0 :(得分:0)

好的,马上蝙蝠:

  • 在第5行,您似乎覆盖了permissionArray函数参数。你确定要这么做吗?
  • user.roles是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数组