我使用屈服来生成项目。有针对CRUD模块的自动生成的Hushorization功能。使用App/Controllers/Articles.server.controller.js中的文章示例。授权是:
exports.hasAuthorization = function(req, res, next) {
if (req.article.user.id !== req.user.id) {
return res.status(403).send('User is not authorized');
}
next();
};
我想添加用户角色,因此管理员或所有者可以编辑:
exports.hasAuthorization = function(req, res, next) {
if (req.article.user.id !== req.user.id) {
var isAdmin = false;
for (var userRoleIndex in req.user.roles) {
if ('admin' === req.user.roles[userRoleIndex]) {
isAdmin = true;
}
}
if (!isAdmin) {
return res.status(403).send('User is not authorized');
}
}
next();
};
问题1这是安全的吗?也许更好的问题是这有多安全?
问题2如果不安全,那么使其安全的方法是什么?我必须在此问题中做类似的事情,还是已经内置了?
您不必在该答案中做任何事情,因为(如果我记得很好)sunjs正在将PassportJS用于该内容。
如果我可能建议您,您可以从路线中传递角色,因此您将没有管理员角色硬编码,并且此方法将更加重复使用。您可以像这样使用它:
app.route('/articles/:id')
.get(users.requiresLogin, users.hasAuthorization(['user']), articles.read)
.delete(users.requiresLogin, users.hasAuthorization(['admin']), articles.delete);