如何使用策略过滤Sails.js蓝图查询?

时间:2015-02-12 23:44:42

标签: javascript sails.js

我有一个isAuthorized策略,如果用户被授权对给定的模型和模型实例执行给定的操作,则该策略返回true。

是否有办法将此策略应用于蓝图路由,例如,对file的GET请求仅返回允许当前用户执行findOne的文件?< / p>

同样,是否可以将相同的策略应用于蓝图填充结果,以便只在填充的数组中返回一些用户关联的文件?

为了做到这一点,我现在要覆盖每个控制器中的find动作,这个动作不太理想。如果可以使用策略应用它而不破坏非常棒的蓝图路由/操作。

2 个答案:

答案 0 :(得分:3)

在我的sails-permissions模块中,我覆盖了sails.js response类型,以便控制器只响应允许用户访问的模型。

请参阅:

答案 1 :(得分:0)

这是帆的一部分,也许是一个新功能?

http://sailsjs.com/documentation/concepts/policies#?using-policies-with-blueprint-actions

{
  UserController: {
      find: ['isAuthorized', 'filterByUserId'],
      findOne: ['isAuthorized', 'filterByUserId']
  }
}

API /策略/ filterByUserId.js

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

    if ( req.session.user ){
        // Use existing req.options.where, or initialize it to an empty object
        req.options.where = req.options.where || {};

        // Set the default `userId`
        req.options.where.id = req.session.user.id;
    }
    //safe to do if isAuthorized policy is enforced in tandem.
    return next();
}