在Node.js Web服务器中确定用户角色和授予API访问权的正确方法是什么?

时间:2016-10-19 11:15:50

标签: node.js rest authentication express

我在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);

1 个答案:

答案 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点的授权角色,甚至将验证放在中间件功能中。