【发布时间】:2022-03-11 12:08:35
【问题描述】:
我正在开发一个平均堆栈 Web 应用程序,该应用程序包含基于登录用户角色的差异访问。有几个不同的角色,例如 admin、govt、volunteer 等。
1.如何根据角色管理前端?
目前我正在为每个角色设置全局标志,例如 isAdmin、isVolunteer、isGovt 等,并根据它们的值,我可以使用 data-ng-if = "Global.isAdmin" 显示不同的 UI
这种方法是否正确。如果不是,请建议处理 UI 的正确方法。
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
}
});
【问题讨论】:
-
@JonSamwell 我想最好提供一个非常简短的答案,至少是概念性的,然后立即参考您的帖子;)
标签: angularjs node.js mean-stack role-based-access-control