我需要某种专家意见才能在Express js中实现“角色和权限”。我计划使用Express js开发Restful Api,但没有足够的信息来实现Roles和Permission,尽管有大量的选项可用于身份验证和授权。
最佳答案
创建表
首先,您需要创建表来保存角色,权限和资源之间的关联:
权限表可能不需要这种粒度,但是有些人喜欢它。例如,您实际上并不需要'Deny',因为您只需检查Read!= true。
现在,当您需要角色对资源的权限时,只需查找role_id和resource_id并检查将哪些权限设置为true。
创建中间件
由于您使用的是Express,因此中间件将很容易添加。例如,假设您有一个称为用户的路由器:
users.post('/', getAuth, handleUserPost)
假设您在请求上具有某种 token ,可以标识发布该帖子的用户,并将用户实例附加到请求对象,则可以执行以下操作:
getAuth = function (req, res, next) {
if(req.user) {
db.getPerms({role_id: req.user.role_id, resource_id: req.resource.id})
.then(function(perms){
var allow = false;
//you can do this mapping of methods to permissions before the db call and just get the specific permission you want.
perms.forEach(function(perm){
if (req.method == "POST" && perms.create) allow = true;
else if (req.method == "GET" && perms.read) allow = true;
else if (req.method == "PUT" && perms.write) allow = true;
else if (req.method == "DELETE" && perm.delete) allow = true;
})
if (allow) next();
else res.status(403).send({error: 'access denied'});
})//handle your reject and catch here
} else res.status(400).send({error: 'invalid token'})
}
该代码仅在该示例中进行了粗略介绍,因此我不会复制并粘贴它,但是它应该为您提供正确的想法。
关于node.js - 在Express REST Api中实现角色和权限的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38893178/