Я работаю над средним веб-приложением, которое содержит дифференциальный доступ на основе роли зарегистрированного пользователя. Есть несколько различных ролей, такие как администратора, правительства, доброволец т.д.Управление доступом на основе ролей веб-приложения среднего стека
1. как управлять передним концом, основанным на роли?
В настоящее время я ставлю глобальные флаги, такие как IsAdmin, isVolunteer, isGovt и т.д. для каждой роли и на основе их стоимости, я могу показать другой пользовательский интерфейс с помощью data-ng-if = "Global.isAdmin"
Является ли это правильно Подход. если нет, предложите правильный способ обработки пользовательского интерфейса.
2. Как управлять внутренним контуром и перенаправлять маршрут, если у пользователя нет авторизации?
В настоящее время я пытаюсь использовать углового разрешения и RBAC, но до сих пор не в состоянии успешно использовать их в моем приложении. может ли кто-нибудь сказать мне лучшую практику для контроль доступа на основе роли для среднего веб-приложения для стека.
при попытке использовать угловое разрешение, мне не удалось связать созданные роли с файлом маршрута.
это ролевой модуль.
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;
});
}
]);
как связать выше configoured ролей в маршрутном файле
$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
}
});
Я написал (-а) запись об этом http://jonsamwell.com/url-route-authorization-and-security-in-angular/ – Jon
@JonSamwell Я думаю, что хорошо дать очень короткий ответ, по крайней мере концептуальный, а затем обратитесь к своему сообщению посмертно;) – diegoaguilar