Я пишу функцию разрешения в методе angular js factory, который проверяет роль пользователя. если пользовательский объект имеет такую роль, тогда результат должен быть истинным, иначе он должен вернуть ложь. мой пользовательский объект:
administrator:true
company_admin:true
registered:true
manager:true
contact:"987654321" email:"[email protected]" name:"Anand"
И функция My Permission в фабрике моделей приложений:
$appModel.checkPermission:function($role, $requireAll) {
var data = $rootScope.authUser;
if (angular.isArray($role)) {
angular.forEach($role, function (value, key) {
var hasRole = $appModel.checkPermission(value); //Recursive Function
if (hasRole && !$requireAll) {
return true;
} else if (!hasRole && $requireAll) {
return false;
}
});
return $requireAll;
} else {
if (data.hasOwnProperty($role) && data[$role])
return true;
}
return false;
}
Есть следующие случаи, которые я проверяю: 1. Если в этом массиве есть несколько ролей с условием «обязательно все», то проверьте, что несколько ролей присутствуют в пользовательском объекте, и верните true, в противном случае false.
$result= $appModel.checkPermission([registered, company_admin], true);
2. Если в этом массиве есть несколько ролей, проверьте, присутствуют ли эти несколько ролей в пользовательском объекте, и если какая-либо роль совпадает, верните true, в противном случае верните false.
$result= $appModel.checkPermission([administrator, company_admin,manager,agent], false);
3. Если в этом массиве есть одна роль, проверьте, присутствует ли эта роль в пользовательском объекте, и, если эта роль совпадает, верните true, в противном случае верните false.
$result= $appModel.checkPermission(register, false);
Приведенный выше код работает нормально для проверки одной роли, но в случае проверки нескольких ролей с условием «требуется все» или «не требуется все» он работает неправильно и возвращает false.