我在Node.js-express设置中有一个带REST API的Web服务器。我公开了不同的API,并使用OAuth对用户进行身份验证。一旦我识别用户我检索他的角色并决定授予API的权限。问题是我的所有API都重复了代码,所有这些都必须检查角色并确定权限。有没有更好的方法来做到这一点?我应该看看ACL吗?一般来说,我是Web服务的新手,可能并不了解最佳解决方案。感谢。
示例代码:
var accessCallback = function (err, user) {
if(err == null) {
var userRole = getUserRole (user.role_id);
if(userRole == ROLE.SUPERVISOR || userRole == ROLE.MANAGER || userRole == ROLE.EMPLOYEE){
doStuff(); //business logic
}
else {
response.status(400).send (error.UserAccessDeniedError());
}
}
else {
response.status(500).send(error.DatabaseError(err));
}
};
access.determineUser (req.body.tokenID, accessCallback);
答案 0 :(得分:1)
您可以做的是声明允许用户的角色列表,并检查用户的角色是否在该列表中:
var userRole = getUserRole(user.role_id);
function foo(error, user) {
if(error == null) {
var authorizedRoles = [
ROLE.SUPERVISOR,
ROLE.MANAGER
];
if(authorizedRoles.indexOf(userRole) > -1) {
//Authorized
} else {
//Error
}
} //...
然后,您可以配置每个API点的授权角色,甚至将验证放在中间件功能中。