节点 ACL |动态网址的授权



我正在使用节点 acl 将我的其余端点授权到我的节点应用程序中。

基于角色的授权非常适合以下 url。

acl.allow([{
roles: ['user'],
allows: [{
resources: ['/books/v1/single'],
permissions: ['post'],
},
{
resources: ['/books/v1/book/list'],
permissions: ['get'],
},
]
},
{
roles: ['admin'],
allows: [{
resources: ['/books/v1/list'],
permissions: ['get'],
}
]
}]);

但是当我尝试添加动态 url 时,它无法按预期工作,并给出错误,这意味着未经授权的需要更多权限。

acl.allow([{
roles: ['user'],
allows: [{
resources: ['/books/v1/single'],
permissions: ['post'],
},
{
resources: ['/books/v1/book/list'],
permissions: ['get'],
},
]
},
{
roles: ['admin'],
allows: [{
resources: ['/books/v1/list'],
permissions: ['get'],
},
{
resources: ['/books/v1/user/:userID/book/:bookID'],
permissions: ['get', 'put', 'delete'],
},
{
resources: ['/users/v1/list'],
permissions: ['get'],
},
{
resources: ['/users/v1/:userId'],
permissions: ['get', 'post', 'put', 'delete'],
}
]
}]);

因此,它为动态网址的 rest 端点提供了未经授权的错误,即/users/v1/:userId或/books/v1/user/:userID/book/:bookID

任何可以使用node-acl libraray实现的方式/方法。

这是因为节点 acl 实际上并不支持层次结构。它实际上只是一个平面列表,因此它显式检查字符串是否与资源匹配。这只是软件包的一个基本问题。由于所有功能都包含在中间件中,并且它不可扩展,因此无法在不进行更改的情况下使用此包执行所需的操作,以便它接受自定义处理程序来决定将哪些内容传递给中间件检查。

以下是 2017-08 年相关未解决的问题的示例。这里缺乏功能性正是为什么像PolicyServer和Authress这样的解决方案存在,它们确实处理通配符中间件和动态资源层次结构。

最新更新