我正在编写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。
答案 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术语。在客户端处理此操作非常简单,因为服务器将仅返回每个响应允许的链接,因此您无需在客户端代码中执行任何操作。现在,如果你在服务器端有意大利面条代码,那么你就有问题......