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

标签 node.js rest authentication express

我有一个采用 Node.js-express 设置的带有 REST API 的 Web 服务器。我公开了不同的 API,并使用 OAuth 来验证用户身份。一旦我识别出用户,我就会检索他的角色并决定授予 API 权限。问题是我的所有 API 都有重复的代码,并且所有 API 都必须检查角色并确定权限。有没有更好的方法来做到这一点?我应该看看ACL吗?一般来说,我是网络服务方面的新手,可能不知道最佳解决方案。谢谢。

示例代码:

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

关于node.js - 在 Node.js Web 服务器中确定用户角色并授予 API 访问权限的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129913/

相关文章:

javascript - q.在 promise 完成之前全部返回

spring - 使用 Spring 处理 REST 应用程序中映射的不明确处理程序方法

node.js - 如何使用 jest 来模拟 Promisified 函数

javascript - 用户注册时创建空白个人资料

java - java中的CURL REST命令,指定了 header 但仍然收到415不支持的媒体类型

JavaEE6+REST : How do I get all REST resources at runtime?

java - 远程登录亚马逊

security - 登录后将用户重定向到登录表单中提供的 URL 会带来哪些安全问题?

ios - Swift 错误 - ADAL 库

mysql - 如何改变 Node js 中的授权(权限)级别