【发布时间】:2015-11-25 04:45:06
【问题描述】:
我有一个小难题要解决。
我有一个用户和一个管理员角色。
userRoles: ['user', 'admin']
用户应该能够列出除管理员之外的所有用户。管理员可以列出所有用户。
我想到的第一个解决方案是在控制器级别检查角色:
if (req.user.role == 'admin'){list all users}
else{list all except admins}
但我想做的更多是在路由级别上,以保持控制器更清洁,但不知何故它不起作用。即使我以管理员身份登录,它也只会列出用户。
router.get('/', auth.hasRole('user'), controller.index);
router.get('/', auth.hasRole('admin'), controller.getUsers);
function hasRole(roleRequired) {
if (!roleRequired) throw new Error('Required role needs to be set');
return compose()
.use(isAuthenticated())
.use(function meetsRequirements(req, res, next) {
if (config.userRoles.indexOf(req.user.role) >= config.userRoles.indexOf(roleRequired)) {
next();
}
else {
res.status(403).send('Forbidden');
}
});
}
有什么建议吗? 谢谢!
【问题讨论】:
-
我不确定我是否清楚你的问题是什么。您正在使用可选的第二个参数,这就是我为我的游戏处理身份验证的方式。有什么问题吗?
-
即使我以管理员身份登录,基于路由也只会列出用户。