2015-10-09 3 views
0

Итак, у меня есть эта проблема, когда я не могу обновить «роль» документа. Документ представляет собой объект «пользователь» (объект «Пользовательская схема в MEANjs»), и он обладает свойством предопределенных ролей. Это роли часть из схемы:MongoDB | Невозможно обновить «роль» документа

roles: { 
     type: [{ 
      type: String, 
      enum: ['user','volunteer','participant','manager', 'admin'] 
     }], 
     default: ['volunteer'] 
    } 

И я обновляю его с помощью регулярного запроса PUT. Запрос возвращает OK (200), но ничего не меняется. Если я использую тот же метод для обновления другого поля (пользовательского, которое я создал), он отлично работает.

Любые подсказки? может быть, что-то с перечислением здесь?

спасибо!

PS - документ версия (__v) не горит, поэтому ничего делать с этим

ответ

1

Это действительно ожидаемое поведение, поскольку роли удаляются по умолчанию в качестве меры безопасности, если вы пытаетесь обновить профиль, как пользователь , иначе любой пользователь мог бы просто добавить роли себе и получить, например, привилегии администратора. файла, где они удаляются в /modules/users/server/controllers/users/users.profile.server.controller.js (в последней версии MEAN.js):

/** 
* Update user details 
*/ 
exports.update = function (req, res) { 
    // Init Variables 
    var user = req.user; 

    // For security measurement we remove the roles from the req.body object 
    delete req.body.roles; 

    ... 

В последней версии MEAN.js вы можете изменить любую роль пользователя, если у вас есть права администратора (проверить файл на modules/users/server/controllers/admin.server.controller.js) :

/** 
* Update a User 
*/ 
exports.update = function (req, res) { 
    var user = req.model; 

    //For security purposes only merge these parameters 
    user.firstName = req.body.firstName; 
    user.lastName = req.body.lastName; 
    user.displayName = user.firstName + ' ' + user.lastName; 
    user.roles = req.body.roles; 

    user.save(function (err) { 
    if (err) { 
     return res.status(400).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } 

    res.json(user); 
    }); 
}; 
+0

Спасибо :) осознал это как раз перед тем, как вы ответили на него. еще раз спасибо :) – Aviad

Смежные вопросы