将Casl与Featherjs-Sequelize集成

时间:2018-07-19 15:37:16

标签: sequelize.js feathersjs feathers-sequelize casl

我正在尝试设置角色和权限来处理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并传入参数一样简单。

如果我需要添加任何内容,请告诉我,不确定如何获得有关此特定问题的帮助。

关于, 埃米尔

2 个答案:

答案 0 :(得分:2)

您可以使用params.sequelizeparams.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不直接相关的权限的方式。

如果您遇到类似的问题,但上述答案尚不清楚,请发表评论。