如何向 Sequelize 钩子添加上下文?

Kev*_* Wu 4 sequelize.js

我想使用钩子对一行执行访问控制,以便用户只能访问他们拥有的行。该钩子将添加一个额外的 where 子句以确保用户是该行的所有者(例如:WHERE ownerId=user.id)。

问题是,如何将用户 id 传递给 Sequelize,以便在钩子触发时钩子拥有它?我已经查看了文档,如果可能的话,这对我来说并不明显。

谢谢

参考:http : //sequelize.readthedocs.org/en/latest/docs/hooks/

Kev*_* Wu 6

要添加上下文,您可以在选项对象中包含您喜欢的任何内容。例如,假设您正在使用Model.findAll(). 您可以像这样设置您的选项:

options = {
  attributes: ['id', 'column1', 'column2'],
  where: { someColumn: 'aValue' }
}

options.context = 'foo';
Run Code Online (Sandbox Code Playgroud)

然后在钩子中,您将能够访问 options.context 并随心所欲地使用它。当然,您可能不应该使用 Sequelize 使用的任何“保留”词来过滤查询。

  • Sequelize 文档中似乎不支持“context”:http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-create 它也不在 Sequelize 打字稿定义中,这意味着使用此选项将不允许您的代码编译:https://github.com/types/sequelize/blob/master/lib/model.d.ts#L511-L522 对于如何让这个工作? (2认同)