如何在sails js中限制rest api结果中的指定字段

时间:2014-12-03 07:37:45

标签: node.js rest sails.js

我在sailsjs中使用restapi,我有一个用户模型:

module.exports = {

  schema: true,

  attributes: {

    username : { type: 'string' },    

    real_name : { type: 'string' },

    encrypted_password: {
      type: 'string'
    },

    id_card : { type: 'string' },

    is_verify : { type : 'boolean' } ,

    email : { type: 'string' },

    phone : {
      type: 'string'
    } 

  },
};

我想公开一些rest api,但我只允许使用findOne方法,还有更多:

我不希望结果包含 id_card ,因为它是一种私人信息。

Sailsjs没有beforeFindOne或afterFindOne。

我该怎么办?

此外:

我想公开一个rest api,比如更新。但我只想要休息api只允许更新手机&电子邮件,而不是real_name& is_verify。

我可以在beforeupdate方法中执行此操作来限制更新字段。

beforeUpdate: function(values, cb) {
    // accessing the function defined above the module.exports
    FilterUpdateField(function() {
      cb();
    })
  }

但是这些代码行并不优雅。有些人可能会写自己的api来覆盖它。

那么,在这两种情况下编写我自己的api以覆盖其余的api是否正确?

1 个答案:

答案 0 :(得分:1)

关于您的第一个问题:

  

我不希望结果包含id_card,因为它是一种私人信息。

您只需将选项protected: true添加到模型属性中,如:

attributes:{
  id_card : { 
    type: 'string',
    protected: true 
  }, 
}

关于第二个问题: 我真的不知道如何保护要更新的属性而不是您已经使用的beforeUpdate。

PD:您应该为每个问题创建不同的主题。