【问题标题】:MongoDB | Can not update 'role' of documentMongoDB |无法更新文档的“角色”
【发布时间】:2016-01-07 09:08:23
【问题描述】:

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

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

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

有什么线索吗?也许这里有枚举的东西?

谢谢!

PS - 文档版本 (__v) 已关闭,因此与此无关

【问题讨论】:

    标签: javascript angularjs mongodb mean-stack


    【解决方案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);
      });
    };
    

    【讨论】:

    • 谢谢 :) 在您回答之前就意识到了这一点。再次感谢:)
    猜你喜欢
    • 2020-09-26
    • 2015-02-21
    • 2017-06-21
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2011-08-04
    相关资源
    最近更新 更多