我正在尝试设置角色和权限来处理api请求。我使用带有羽毛的Feathers.js - PostGres数据库的续集。
对于管理角色和权限,我使用的是casl.js:https://github.com/stalniy/casl
大多数集成Casl的例子都是基于mongo/mongoose的。我在后面阅读了以下文章:https://stalniy.github.io/casl/abilities/database/integration/2017/07/22/database-integration.html
在这个例子中,如果他们使用自动跟踪范围,目前羽毛-后缀不支持带参数的自动跟踪范围(据我所见)。
长话短说,我正试图找到一种方法,集成羽毛-续集与Casl,以管理资源权限。
到目前为止,我可以为每个用户构建Casl的“能力”,但是现在将这些能力连接到数据库是我陷入困境的地方。
当使用Mongo/mongoose时,它很容易,因为您只需执行toMongoQuery并传递参数。
如果我有什么需要补充,请告诉我,不知道如何在这个特定的问题上寻求帮助。
你好,埃米尔
发布于 2018-07-20 07:05:23
因此,我设法解决了这个问题:我复制了以下代码:https://github.com/stalniy/casl-feathersjs-example/blob/master/src/hooks/abilities.js
然后,我通过添加以下函数对其进行了调整:
function ruleToQuery(rule) {
if (JSON.stringify(rule.conditions).includes('"$all":')) {
throw new Error('Sequelize does not support "$all" operator')
}
return rule.inverted ? { $not: rule.conditions } : rule.conditions
}然后我替换了这一行:
const query = toMongoQuery(ability, serviceName, action)使用
const query = rulesToQuery(ability, action, serviceName, ruleToQuery)进口后
const { rulesToQuery } = require('@casl/ability/extra');我的问题之一是我创建许可的方式,这与羽毛和CASL没有直接关系。
如果你有类似的问题,但上面的答案不清楚,请评论。
发布于 2018-07-20 04:13:15
您可以使用params.sequelize或params.query + 函数。
看看CASL羽毛实例,看看我是如何为feathers-mongoose做这件事的
https://stackoverflow.com/questions/51426762
复制相似问题