Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Node.js Web服务器中,确定用户角色和授予API访问权限的正确方法是什么?_Node.js_Rest_Authentication_Express - Fatal编程技术网

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

在Node.js Web服务器中,确定用户角色和授予API访问权限的正确方法是什么?,node.js,rest,authentication,express,Node.js,Rest,Authentication,Express,我在Node.js-express设置中有一个带有RESTAPI的Web服务器。我公开了不同的API,并使用OAuth对用户进行身份验证。一旦我识别了用户,我将检索他的角色并决定授予API权限。问题是我所有的API都有重复的代码,所有API都必须检查角色并确定权限。有没有更好的办法?我应该看看ACL吗?一般来说,我是Web服务的新手,可能不知道最好的解决方案。谢谢 示例代码: var accessCallback = function (err, user) { if(err == nu

我在Node.js-express设置中有一个带有RESTAPI的Web服务器。我公开了不同的API,并使用OAuth对用户进行身份验证。一旦我识别了用户,我将检索他的角色并决定授予API权限。问题是我所有的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);

您可以做的是声明一个允许该用户的角色列表,并检查该用户的角色是否在该列表中:

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点的授权角色,甚至可以将验证放在中间件函数中