MongoDB |无法更新文档 'role'

MongoDB | Can not update 'role' of document

所以我遇到了无法更新 'role' 文档的问题。 该文档是一个 'user'(MEANjs 中的用户模式)对象,它具有预定义的角色 属性。 这是模式中的角色部分:

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

我正在通过常规 PUT 请求更新它。 请求 returns OK (200) 但没有任何变化。 如果我使用相同的方法更新另一个字段(我创建的自定义字段),它工作正常。

有线索吗?也许这里有枚举?

谢谢!

PS - 文档的版本 (__v) 已关闭所以与此无关

这确实是预期的行为,因为如果您尝试以用户身份更新配置文件,作为一项安全措施,默认情况下会删除角色,否则任何用户都可以向自己添加角色并获得例如管理员权限。 它们被删除的文件是 /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);
  });
};