如何在sails js中限制rest api中的指定更新字段

时间:2014-12-08 15:10:48

标签: 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,比如更新。但我只想要休息api只允许更新手机&电子邮件,而不是real_name& is_verify。

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

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

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

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

我问了一个相关的问题here。我在这里尝试使用:

is_verify : { type : 'boolean' ,protected:true} ,

    email : { type: 'string',protected:true },

但没有运气。

1 个答案:

答案 0 :(得分:1)

{protected:true}选项在模型实例上调用toJSON时删除受保护的属性。

执行所需操作的唯一方法是过滤将到达更新方法的结果。我会在模型中执行此操作:

beforeUpdate: function(values, next) {
  if(values.email) delete values.email;
  if(values.is_verify) delete values.is_verify;
  // if whatever the delete whatever
  return next();
}

我不认为这种方式最优雅,但它很干净,很容易理解那里发生的事情。

您可以在此处查看所有水线验证:http://sailsjs.org/#/documentation/concepts/ORM/Validations.html