【问题标题】:Meteor compare elements in array流星比较数组中的元素
【发布时间】:2015-06-08 08:15:54
【问题描述】:

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

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;
}

【问题讨论】:

    标签: arrays templates meteor permissions roles


    【解决方案1】:

    好的,马上开始:

    • 在第 5 行,您似乎正在覆盖您的 permissionArray 函数参数。您确定要这样做吗?
    • user.roles 是 Object 还是 Array?我希望有一个数组,但 _.keys(user.roles) 没有意义。
    • 使用$in mongo 查询来获取子角色会更有效,然后您可以遍历生成的游标。事实上,也许您可​​以使用两个 $in 查询运算符来立即获得结果:Meteor.roles.find({name:{$in:rolesToSearch}, 'subRoles.$':{$in: permissionArray}}) 这很难测试,但我猜您可以找到这样的查询 - 如果它返回结果 - 应该让你的函数返回true

    【讨论】:

      【解决方案2】:

      user.roles 是对象,user.roles 有 subRoles 数组

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 2016-03-25
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 2015-07-28
        相关资源
        最近更新 更多