我正在尝试对我的sails.js apis中的模型实施数据访问限制,并且正在寻找更好的解决方案。
到目前为止,我的策略限制了对控制器上特定操作的访问,该策略修改了请求以包含应始终添加到Model查询的过滤器。 类似的东西:
{
"owner" : "davepreston"
}
此时我没有看到任何强制(或简化)过滤器使用的方法,所以如果我在我的控制器中使用Model.find而忘记添加过滤器,我可能会显示太多数据用户。
tldr; 有没有办法限制模型中的数据访问,以便访问模型的所有控制器自动获得相同的数据访问限制?
答案 0 :(得分:1)
一种方法是实施所谓的"定制" Model Methods。
我不知道实际覆盖正常"发现"是不是一个好习惯。作为sails的方法,它通过创建像" FindOneByMyAttributeName"等函数来实现一些魔力。但你可以实现一个" findWithRestriction"方法
另请注意,谈论一个模型(理论上)并不是要在那里访问您的请求对象(req),因此请将当前用户作为自定义函数的参数;)
(在我自己的项目中,我坚持使用这些政策,如果您对忘记限制和访问权限感到焦虑,可以进行一些单元测试以验证您的权利管理)
答案 1 :(得分:0)
我找到了一个可以覆盖模型的toJSON方法的地方: 覆盖模型的toJSON()方法
module.exports = {
attributes: {
...
toJSON: function() {
var obj = this.toObject();
delete obj.password;
return obj;
}
另一种可能的解决方案(不知道这是否适用于最新版本):
Model.find({select:['col1', 'col2','col3']})