我现在正处于开发Web应用程序的早期阶段,并且我有一个User模型,其中包含一个isAdmin
字段,默认值为false
。我通过选择获取/放置路由中要更新的字段来防止用户在注册或配置文件编辑期间进行设置。参见示例:
exports.editUser = async function(req, res, next) {
try {
const { dobYear, dobMonth, dobDay } = req.body;
const dob = formatDob(dobYear, dobMonth, dobDay);
const user = await db.User.findById(req.params.id);
const updates = pick(req.body, [ 'fullName', 'email', 'password', 'gender', 'address', 'avatar_url' ]);
merge(user, updates, {dob});
let updatedUser = await user.save();
return res.status('200').json(updatedUser);
}
现在,我正在考虑创建或修改管理员用户的最佳方法。如果我创建了一组单独的管理员路由来进行创建/修改/等操作,其中我们可以将isAdmin
设置为true
,那么任何能够猜出该路由的人都可以创建管理员用户。如何安全地做到这一点?
类似地,我希望管理员能够做某些事情,而用户却做不到。我会使用单独的中间件来保护这些路由,以验证它们是管理员吗?