使用find和update方法,我可以通过添加设置req.options.where.owner = userID
的策略来限制仅限于登录用户的数据获取,因此不需要为这些方法创建自定义控制器或模型。
使用、update、和 create ,我还可以设置req.options.values.owner = userID
,以便用户不能创建或更新属于其他用户的对象。
但是问题是蓝图findOne控制器没有任何选择来进行这种过滤,因此任何登录用户都可以请求另一个用户创建和拥有的对象。
我是否可以限制findOne而不编写自己的控制器和查询?
发布于 2015-08-23 13:59:21
找到解决该问题的解决方案,您可以通过在api文件夹中创建一个名为蓝图的文件夹来覆盖默认的蓝图操作,在那里您可以创建一个findone.js (小写)文件,
/node_modules/sails/lib/hooks/blueprints/actions/findOne.js
复制到/api/blueprints/findone.js
.where( actionUtil.parseCriteria(req) );
添加到查询。actionutil
的路径从require('../actionUtil');
更改为require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');
瞧,现在findOne操作将尊重您的req.options.where
查询。
发布于 2015-08-23 04:50:16
您可以在您的策略中指定这样的蓝图
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');
};
我忘了,是蓝图名findOne
还是findone
。
https://stackoverflow.com/questions/32165733
复制