0

我正在尝试设置角色和权限来处理 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

在提供的示例中,他们使用了续集范围,目前羽毛续集不支持带有参数的续集范围(据我所知)

长话短说,我正在尝试找到一种将 Feathers-sequelize 与 Casl 集成来管理资源权限的方法。

到目前为止,我可以为每个用户构建 Casl“能力”,但现在将这些能力连接到数据库是我被卡住的地方。

使用 Mongo/mongoose 时,您只需执行 toMongoQuery 并传入参数即可。

如果有什么我需要添加的,请告诉我,不知道如何在这个特定问题上获得帮助。

问候,埃米尔

4

2 回答 2

2

您可以使用params.sequelizeparams.query+toSequelizeQuery功能

查看CASL Feathers 示例以查看我如何做到这一点的示例feathers-mongoose

于 2018-07-20T04:13:15.330 回答
2

所以设法解决了这个问题:我复制了这段代码: 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 没有直接关系。

如果您有类似的问题,但上面的答案不清楚,请发表评论。

于 2018-07-20T07:05:23.167 回答