如何使用策略

时间:2015-08-23 10:39:05

标签: sails.js

使用查找更新方法,我可以通过添加设置req.options.where.owner = userID的策略来限制获取仅限登录用户的数据,因此我不需要为这些方法创建自定义控制器或模型。

使用更新创建,我还可以设置req.options.values.owner = userID,以便用户无法创建或更新属于其他用户的对象。

但问题是蓝图 findOne 控制器没有这种过滤的任何选项,因此任何登录用户都可以请求由另一个用户创建和拥有的对象。

无论如何,我可以在不编写自己的控制器和查询的情况下限制 findOne 吗?

2 个答案:

答案 0 :(得分:2)

找到问题的解决方案,您可以做的是通过在api文件夹中创建名为 blueprints 的文件夹来覆盖默认蓝图操作,在那里您可以创建 findone.js (小写)文件,

  1. 将原始蓝图操作从/node_modules/sails/lib/hooks/blueprints/actions/findOne.js复制到/api/blueprints/findone.js
  2. .where( actionUtil.parseCriteria(req) );添加到查询中。
  3. 别忘了将actionutil的路径从require('../actionUtil');更改为require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');
  4. Voila,现在findOne行动将尊重您的req.options.where查询。

答案 1 :(得分:1)

您可以在政策中指定蓝图,例如

module.exports = function (req, res, next) {

  var blueprint = req.options.action;

  if (blueprint === 'findOne') {
    // do restriction here
    return next();
  }

  res.forbidden('not allowed to do something');
};

我很遗忘,是蓝图名称findOnefindone