将调用与 Feathersjs-Sequelize 集成
Integrate Casl with Featherjs-Sequelize
我正在尝试设置角色和权限来处理 api 请求。我正在将 Feathers.js 与 feathers-sequelize 一起用于 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-scopes(据我所知)
长话短说,我正在尝试找到一种将 feathers-sequelize 与 Casl 集成以管理资源权限的方法。
到目前为止,我可以为每个用户构建 Casl 'abilities',但现在将这些能力连接到数据库是我遇到的问题。
使用 Mongo/mongoose 时很简单,只需简单地执行 toMongoQuery 并传入参数即可。
如果我需要添加任何内容,请告诉我,我不确定如何获得有关此特定问题的帮助。
此致,
埃米尔
您可以使用 params.sequelize
or params.query
+ toSequelizeQuery
function.
看看CASL Feathers example to see an example how I did this for feathers-mongoose
所以设法解决了这个问题:
我复制了这段代码:
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 没有直接关系。
如果你有类似的问题,但上面的答案不清楚,请评论。
我正在尝试设置角色和权限来处理 api 请求。我正在将 Feathers.js 与 feathers-sequelize 一起用于 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-scopes(据我所知)
长话短说,我正在尝试找到一种将 feathers-sequelize 与 Casl 集成以管理资源权限的方法。
到目前为止,我可以为每个用户构建 Casl 'abilities',但现在将这些能力连接到数据库是我遇到的问题。
使用 Mongo/mongoose 时很简单,只需简单地执行 toMongoQuery 并传入参数即可。
如果我需要添加任何内容,请告诉我,我不确定如何获得有关此特定问题的帮助。
此致, 埃米尔
您可以使用 params.sequelize
or params.query
+ toSequelizeQuery
function.
看看CASL Feathers example to see an example how I did this for feathers-mongoose
所以设法解决了这个问题: 我复制了这段代码: 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 没有直接关系。
如果你有类似的问题,但上面的答案不清楚,请评论。