我用meanjs生成一个项目。 有一些为crud模块自动生成的授权功能。使用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如果它不安全那么Meanjs的安全方法是什么? 我是否必须做这样的事情SO Question或已经内置的东西?
答案 0 :(得分:1)
你不必在那个答案中做任何事情,因为(如果我记得很好的话)meanjs正在使用passportjs来处理那些东西。
如果我建议您,您可以从路由传递角色,因此您不会将管理员角色硬编码,并且此方法将更具可重用性。你可以这样使用它:
app.route('/articles/:id')
.get(users.requiresLogin, users.hasAuthorization(['user']), articles.read)
.delete(users.requiresLogin, users.hasAuthorization(['admin']), articles.delete);