我正在尝试使用 npm 模块 Acl 来实现 ACL 系统。主页可以在这里找到:https://github.com/OptimalBits/node_acl。
该文档展示了许多非常简单的示例,用于授予角色访问权限。特别是,这里有一段很好的代码:
acl.allow([
{
roles:['guest','member'],
allows:[
{resources:'blogs', permissions:'get'},
{resources:['forums','news'], permissions:['get','put','delete']}
]
},
{
roles:['gold','silver'],
allows:[
{resources:'cash', permissions:['sell','exchange']},
{resources:['account','deposit'], permissions:['put','delete']}
]
}
])
不幸的是,文档没有显示任何更复杂的网址示例,例如"/blogs/:id/today"。是否可以为这些类型的动态 URL 设置 acl?
而且,我还需要指定只有某些用户可以获取自己的信息。这意味着"users/:id"只有在用户的 id 与 url 的 id 相同时才应该有效。这可能吗?
他们的文档确实涵盖了这一点,除非我错过了什么。 摘自他们的自述文件:
中间件接受 3 个可选参数,这些参数在某些参数中很有用 情况。例如,有时我们不能将整个 url 视为 资源:
app.put('/blogs/:id/comments/:commentId', acl.middleware(3), function(req, res, next){…}
在这种情况下,资源将只是 网址(不带结尾斜杠)。
也可以添加自定义用户 ID 或检查其他 权限比方法:
app.put('/blogs/:id/comments/:commentId', acl.middleware(3, 'joed', 'post'), function(req, res, next){…}
尽管文档确实说节点 acl 支持这里的动态 url。但是在查看源代码后,我们没有找到任何支持访问动态 url 的参考。
这里还有一个开放的 github 问题 https://github.com/OptimalBits/node_acl/issues/192 它指向相同的问题。
虽然我们可以实现我们自己的中间件过滤器来支持 动态网址 ,但我想它应该在节点 acl 库本身中修复。
结论:- 节点ACL库不支持带有参数的URL(即动态URL)。但是,如果我们仍然想将节点 ACL 库用于动态 url,则可以使用来自 https://github.com/OptimalBits/node_acl/issues/192#issuecomment-226761840 的建议。