Я работаю над веб-приложением среднего стека, которое содержит дифференциальный доступ на основе роли зарегистрированного пользователя. существует несколько разных ролей, таких как администратор, правительство, волонтер и т. д.
<сильный>1. как управлять внешним интерфейсом в зависимости от роли?
в настоящее время я устанавливаю глобальные флаги, такие как isAdmin, isVolunteer, isGovt и т. д. для каждой роли, и в зависимости от их значения я могу отображать другой пользовательский интерфейс, используя data-ng-if = "Global.isAdmin"
Является ли этот подход правильным. если нет, предложите правильный способ обработки пользовательского интерфейса.
<сильный>2. как управлять серверной частью и перенаправить маршрут, если у пользователя не было авторизации?
в настоящее время я пытаюсь использовать angular-permission и rbac, но все еще не могу успешно использовать их в своем приложении. кто-нибудь может рассказать мне о лучших методах управления доступом на основе ролей для веб-приложения среднего стека.
при попытке использовать angular-permission мне не удалось связать созданные роли с файлом маршрута.
это ролевой модуль.
angular.module('mean.users', ['permission'])
.run(['permission', 'Global', '$q',
function(Permission, Global, $q) {
console.log('not anonumous');
Permission
.defineRole('anonymous', function(stateParams) {
var deferred = $q.defer();
if (Global.user) {
deferred.resolve();
} else {
deferred.reject();
}
return deferred.promise;
})
.defineRole('admin', function(stateParams) {
if (Global.isAdmin) {
deferred.resolve();
} else {
deferred.reject();
}
return deferred.promise;
})
.defineRole('govt', function(stateParams) {
if (Global.isGovt) {
deferred.resolve();
} else {
deferred.reject();
}
return deferred.promise;
})
.defineRole('volunteer', function(stateParams) {
if (Global.isVolunteer) {
deferred.resolve();
} else {
deferred.reject();
}
return deferred.promise;
});
}
]);
как связать настроенные выше роли в файле маршрута
$stateProvider
.state('create user', {
url: '/users/create',
templateUrl: 'users/views/create.html',
resolve: {
loggedin: checkLoggedin
}
})
.state('all users', {
url: '/users/list',
templateUrl: 'users/views/list.html',
data: {
permissions: {
only: ['admin'],
redirectTo: 'home'
}
}
})
.state('show user', {
url: '/users/:userId/view',
templateUrl: 'users/views/view.html',
resolve: {
loggedin: checkLoggedin
}
})
.state('edit user', {
url: '/users/:userId/edit',
templateUrl: 'users/views/edit.html',
data: {
permissions: {
only: ['admin']
}
}
})
.state('myprofile', {
url: '/users/:userId/me',
templateUrl: 'users/views/myprofile.html',
resolve: {
loggedin: checkLoggedin
}
});