2015-04-03 5 views
0

Я только начинаю приключение метеор, поэтому у меня есть небольшая проблема Структура базы данных выглядит так: У пользователей есть роли, роли имеют подстроки. Я хочу проверить, есть ли у пользователя хотя бы один из подпрограмм, который является аргументом функции как массив. Вот код:Элементы сравнения Meteor в массиве

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

ОК, сразу же:

  • В строке 5, вы, кажется, переписав permissionArray аргумент функции. Вы уверены, что хотите это сделать?
  • Является пользователем. Object или Array? Я бы ожидал массив, но тогда _.keys(user.roles) не имеет смысла.
  • Было бы более эффективным использование запроса mongo $in, чтобы получить подстроки, затем вы можете перебрать полученный результирующий курсор. На самом деле, возможно, вы можете использовать два оператора запроса $in, чтобы получить результат сразу: Meteor.roles.find({name:{$in:rolesToSearch}, 'subRoles.$':{$in: permissionArray}}) Трудно проверить это, но я предполагаю, что вы можете найти такой запрос - если он возвращает результат - должен вернуть вашу функцию true ,
0

user.roles является Ocject, user.roles есть массив subRoles

Смежные вопросы