使用查找和更新方法,我可以通过添加设置req.options.where.owner = userID
的策略来限制获取仅限登录用户的数据,因此我不需要为这些方法创建自定义控制器或模型。
使用更新和创建,我还可以设置req.options.values.owner = userID
,以便用户无法创建或更新属于其他用户的对象。
但问题是蓝图 findOne 控制器没有这种过滤的任何选项,因此任何登录用户都可以请求由另一个用户创建和拥有的对象。
无论如何,我可以在不编写自己的控制器和查询的情况下限制 findOne 吗?
答案 0 :(得分:2)
找到问题的解决方案,您可以做的是通过在api文件夹中创建名为 blueprints 的文件夹来覆盖默认蓝图操作,在那里您可以创建 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');
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');
};
我很遗忘,是蓝图名称findOne
或findone
。