我正在尝试设置角色和权限来处理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
在提供的示例中,他们使用了sequelize范围,目前feathers-sequelize不支持带有参数的sequelize-scope(据我所知)
长话短说,我正在尝试找到一种将羽毛序列化与Casl集成以管理资源权限的方法。
到目前为止,我可以为每个用户构造Casl“功能”,但是现在将这些功能连接到数据库是我的工作。
使用Mongo / mongoose时,就像对mongoQuery并传入参数一样简单。
如果我需要添加任何内容,请告诉我,不确定如何获得有关此特定问题的帮助。
关于, 埃米尔
答案 0 :(得分:2)
您可以使用params.sequelize
或params.query
+ toSequelizeQuery
function。
看看CASL Feathers example来看看我如何为feathers-mongoose
做这个的例子
答案 1 :(得分:1)
因此设法解决了该问题: 我复制了这段代码: 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');
我的问题之一是我创建与Feathers或CASL不直接相关的权限的方式。
如果您遇到类似的问题,但上述答案尚不清楚,请发表评论。