节点 ACL 动态链接



我正在尝试使用 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 的建议。

最新更新