在 mongoose 中为用户分配角色
Posted
技术标签:
【中文标题】在 mongoose 中为用户分配角色【英文标题】:Assign roles to users in mongoose 【发布时间】:2021-06-29 18:30:19 【问题描述】:我正在尝试使用 mongoose 更新用户角色。我一直在使用猫鼬 findOneAndUpdate 但无法更新角色。我没有收到任何错误消息,但我在更新之前获得了文档。所以我做了一些研究并尝试添加new:true
,但它并没有改变任何东西。然后我看到有人使用聚合查询$push
,但这也没有用。
我已经多次重写这个查询,但没有给出预期的结果
exports.changeRole = async (req, res) =>
User.findOneAndUpdate(
id: req.param.userId ,
$push:
$set: "roles[0].name": req.body.name ,
,
,
new: true
)
.populate("roles", "-__v")
.exec((err, data) =>
if (err)
console.log(err);
else
console.log(data);
);
;
我如何发送邮递员
"roles": ["Admin"]
这是我在控制台中得到的:
roles: [ _id: 606242fa3bcbc13305bee567, name: 'user' ],
_id: 606307a839a54f7982f8ff84,
username: 'before',
email: 'before@gmail.com',
password: '$2a$/lvMv80IPZe9FSm',
__v: 1
我有一个名为 User 的模型
const userSchema = new mongoose.Schema(
username:
type: String,
required: true,
min: 6,
max: 255,
,
email:
type: String,
required: true,
min: 6,
max: 255,
,
password:
type: String,
required: true,
min: 6,
max: 15,
,
roles: [
type: mongoose.Schema.Types.ObjectId,
ref: "Role",
,
],
,
timestamp: true
);
此用户模型引用 Role.js。 objectId:s 的数组。因此,如果它们不存在,我会自动创建四个角色文档。每个用户都在引用其中一个文档(角色)
const Role = mongoose.model(
"Role",
new mongoose.Schema(
name: String,
)
);
【问题讨论】:
req.body.name
我认为应该是 req.body.roles
根据您从邮递员发送的内容。
好的,我改变了,但我仍然在控制台中得到相同的输出。它会查找并填充,但不会更新任何内容。这让我想知道是否需要使用多个查询来更新? @TusharGupta-curioustushar
试试$set: "roles.0.name": req.body.roles
@TusharGupta-curioustushar 什么都没有。在更新之前它仍然是 console.logs
使用await
developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
【参考方案1】:
我的想法不对。我不需要更改填充的文档,只需要更改它在 User.js 中的 roles:[]
中引用的 objectId。使用 $set 更改字段并使用 $push to 添加新值。
exports.changeRole = async (req, res) =>
await User.findOneAndUpdate(
id: req.params.userId ,
$set: roles: req.body.roles ,
,
new: true
)
.populate("roles")
.then((data) =>
if (!data) return res.status(404).send("Not found");
res.send(data);
)
.catch((err) =>
return res.status(500).send( message: err.message );
);
;
【讨论】:
以上是关于在 mongoose 中为用户分配角色的主要内容,如果未能解决你的问题,请参考以下文章
使用用户 SPI 在 Keycloak 中为外部用户分配角色
如何在 Laravel 中为 1 个路由分配 2 个或多个用户角色?