no7dw
no7dw

Reputation: 431

how can I limit specify update filed in rest api in sailjs

I'm using restapi in sailsjs , I have a user model:

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'
    } 

  },
};

I would like to expose a rest api , such as update. But I only want rest api to just allow update phone & email, rather than real_name & is_verify .

I can do it in beforeupdate method to limit the update filed.

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

But these lines of code would NOT be elegant. Some may rather write their own api to override it.

So, Would it be properly to write my own api to override the rest api in this situation?

I asked a related question here. Here I have try to use :

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

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

but without luck.

Upvotes: 0

Views: 68

Answers (1)

josebaseba
josebaseba

Reputation: 101

The {protected: true} option removes the protected attribute when toJSON is called on a model instance.

The only way to do what you want, is filtering the results that will arrive to the update method. I would do this in the Model:

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();
}

I don't think that this way is the most elegant, but it's clean and easy to understand what's happening there.

You can check all the Waterline validations here: http://sailsjs.org/#/documentation/concepts/ORM/Validations.html

Upvotes: 1

Related Questions