【问题标题】:sails.js data access restriction per model每个模型的sails.js 数据访问限制
【发布时间】:2015-02-27 17:59:25
【问题描述】:

我正在尝试对我的sails.js api 中的模型实施数据访问限制,并且正在寻找更好的解决方案。

到目前为止,我有限制对控制器上特定操作的访问的策略,该策略会修改请求以包含一个过滤器,该过滤器应始终添加到模型查询中。 比如:

{
  "owner" : "davepreston"
}

目前,我看不到任何强制(或简化)过滤器使用的方法,因此如果我在控制器中使用 Model.find 并忘记添加过滤器,我可能会显示太多数据用户。

tldr; 有没有办法限制模型中的数据访问,以便所有访问模型的控制器自动获得相同的数据访问限制?

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    一种方法是实现所谓的“自定义”Model Methods

    我不知道实际上覆盖正常的“find”方法是否是一个好习惯,因为它自己通过创建“FindOneByMyAttributeName”之类的函数来发挥一些魔力,但您可以实现“findWithRestriction”方法。

    还请注意,谈到模型时,您(理论上)不应该在其中访问您的请求对象 (req),因此将当前用户作为自定义函数的参数;)

    (在我自己的项目中,我坚持政策,如果您担心忘记限制和访问,您可以进行一些单元测试以验证您的正确管理)

    【讨论】:

    • 关于自定义模型方法的好提醒。我希望能够覆盖标准(查找、更新等)方法,以便蓝图继续工作。现在我已经修改了我项目中的蓝图。
    • 正如我所说,您可以尝试覆盖模型中的 find :] 但是我不知道这是否是一种好的做法 :] :]
    【解决方案2】:

    我在某个地方找到了可以覆盖模型的 toJSON 方法的地方: 覆盖模型的 toJSON() 方法

    module.exports = {
        attributes: {
            ...
            toJSON: function() {
                var obj = this.toObject();
                delete obj.password;
                return obj;
           }
    

    还有另一种可能的解决方案(不知道这是否适用于最新版本):

    Model.find({select:['col1', 'col2','col3']})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2014-04-27
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2011-07-19
      • 2015-12-30
      相关资源
      最近更新 更多