У меня есть небольшая дилемма, чтобы решить эту проблему.Маршрутизация Expressjs: Ролевые маршруты
У меня есть пользователь и роль администратора.
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');
}
});
}
любые предложения? Спасибо!
Я не уверен, что я понимаю, каков ваш вопрос. Вы используете опциональный второй параметр, так я справился с проверкой подлинности для своей игры. Что-то не так? –
на основе маршрута перечислены только пользователи, даже если они зарегистрированы в качестве администратора. – Mo7