流星比较阵列中的元素



我刚刚开始流星的冒险,所以我有一个小问题数据库结构如下所示:用户有角色,角色有子程序。我想检查用户是否至少有一个子例程,它是作为数组的函数参数。这是代码:

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具有子角色数组

最新更新