我在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 },
但没有运气。
答案 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