Запретить атрибут модели быть установленным конструктором в jugglingDB

Учитывая пользовательскую модель в приложении узла с JugglingDB

User = schema.define('User', {
  name      : String,
  email     : String,
  API_KEY   : String,
  created   : {type: Date, default: Date.now},
});

Я хотел бы, чтобы атрибут API_KEY был "только для чтения". Итак, следующие данные:

var data = {
  name     : 'Test account',
  email    : 'test@test.com',
  API_KEY  : 'Some key' 
}

Принимается как:

var data = {
  name     : 'Test account',
  email    : 'test@test.com'
}

В:

var user = new User(data);

Таким образом, только сервер может создать API_KEY для пользователей. Это возможно?

1 ответ

Вы можете сделать это с помощью крючков. В частности, вы могли бы использовать beforeCreate а также beforeUpdate ловушка, которая будет выполняться всякий раз, когда создается новый пользователь или его свойства обновляются.

Например, вы можете назначить ключ API, сгенерированный сервером, при создании пользователя и убедиться, что он не будет изменен позже, используя следующие хуки:

User.beforeCreate = function(next, data) {
    data.API_KEY = server_generate_api_key();
    next();
};

User.beforeUpdate = function(next, data) {
    delete data.API_KEY;
    next();
};

Кроме того, вы можете посмотреть в beforeSave крюк.

Другие вопросы по тегам