如何防止 findOneAndUpdate 将某些关键字更新到列?
How to prevent findOneAndUpdate update certain keywords to a column?
我有一个用户管理系统,其中管理员有权更新其用户的角色,如何防止管理员更新角色高于他的文档?
示例,权限降序排列:
1:超级管理员
2:管理员
3:主管
4: 用户
现在我有一个代码可以将用户的角色更新为:
router.post('/changeRole', async (req, res) => {
const { email } = req.body;
const updatedUser = await Users.findOneAndUpdate({ email }, { $set: { role } }, { new: true });
}
);
通过上面的代码,管理员可以让任何人成为超级管理员,并为该用户提供所有访问权限。有没有像下面这样的方法来防止查询?
router.post('/changeRole', async (req, res) => {
const { email } = req.body;
const updatedUser = await Users.findOneAndUpdate({ email }, { $set: { role !== "superadmin" } }, { new: true });
}
);
我认为这可以帮助你:
const updatedUser = await Users.findOneAndUpdate(
{
email: email,
role: {$ne: "superadmin"}
},
{ $set: role },
{ new: true }
);
$ne
运算符表示 not equal
,因此这仅在电子邮件匹配且角色不同于 superadmin
.
时更新文档
我有一个用户管理系统,其中管理员有权更新其用户的角色,如何防止管理员更新角色高于他的文档? 示例,权限降序排列: 1:超级管理员 2:管理员 3:主管 4: 用户
现在我有一个代码可以将用户的角色更新为:
router.post('/changeRole', async (req, res) => {
const { email } = req.body;
const updatedUser = await Users.findOneAndUpdate({ email }, { $set: { role } }, { new: true });
}
);
通过上面的代码,管理员可以让任何人成为超级管理员,并为该用户提供所有访问权限。有没有像下面这样的方法来防止查询?
router.post('/changeRole', async (req, res) => {
const { email } = req.body;
const updatedUser = await Users.findOneAndUpdate({ email }, { $set: { role !== "superadmin" } }, { new: true });
}
);
我认为这可以帮助你:
const updatedUser = await Users.findOneAndUpdate(
{
email: email,
role: {$ne: "superadmin"}
},
{ $set: role },
{ new: true }
);
$ne
运算符表示 not equal
,因此这仅在电子邮件匹配且角色不同于 superadmin
.