如何管理RESTful API的权限

时间:2014-12-28 11:54:46

标签: node.js rest express mean-stack

我正在编写MEAN.JS多用户应用程序,并且必须限制某些操作,以便我尝试找到"最佳做法" 来管理权限在我自己的API

我正考虑为每个用户设置权限数组,每个API都必须检查要求的用户是否具有所需的所有权限。

离。

 GET /api/foo/:foo would need "foo-read"
 POST /api/foo would need "foo-create"
 PUT /api/foo/:foo would need "foo-update"
 DELETE /api/foo/:foo would need "foo-delete"

 GET /api/foo/:foo/bar:/bar would need "foo-read" and "bar-read"
 POST /api/foo/bar would need "foo-create" and "bar-create"
 PUT /api/foo/:foo/bar:/bar would need "foo-update" and "bar-update"
 DELETE /api/foo/:foo/bar:/bar would need "foo-delete" and "bar-delete"

这样,用户可以拥有创建新用户的权限,但不具有授予他们管理权限的权限。

我想知道这是否是最好的方法,或者是否有一些现有的middelware。

3 个答案:

答案 0 :(得分:2)

使用授权框架。我使用cansecurity(完全披露:我是原作者)。它支持使用程序化中间件和声明性格式。

我会使用声明,因为我喜欢保持我的server.js干净,并且我的所有安全配置都在一个地方:

{
    "routes": [
        // [verb,path,default,[test params,] test condition]
        ["GET","/api/foo/:foo","item.roles.foo_read === true"],
        ["PUT","/api/foo/:foo","item.roles.foo_update === true"]
    ]   
}

答案 1 :(得分:1)

也许你可以使用快速中间件过滤器来做到这一点。

app.get(function(req,res,next){your code - res.end(data);});

var checkpermissions=function(req,res,next){ if bad permission raise error or print access denied page otherwise run next();};
app.get(checkpermissions,function(req,res,next){your code - res.end(data);});

答案 2 :(得分:1)

我确信访问控制不能依赖于REST API。 REST只是一种交付方法,其细节可以非常快速地改变,并且这不是唯一的单一交付方法,例如,我也可以创建传统的HTML Web应用程序作为交付方法。授权必须依赖于业务逻辑或换句话说域模型。因此,在您的情况下,授权必须在REST API和业务逻辑之间,并且必须使用业务术语来描述,而不是使用REST术语。在客户端处理此操作非常简单,因为服务器将仅返回每个响应允许的链接,因此您无需在客户端代码中执行任何操作。现在,如果你在服务器端有意大利面条代码,那么你就有问题......