Я хотел бы использовать passport.js, чтобы убедиться, что, когда пользователи нажимают на определенные конечные точки, они не только имеют правильный пароль, но и являются членами определенной группы или имеют определенный доступ.
Для простоты, если у меня есть уровни доступа USER и ADMIN.
Я могу использовать паспорт для аутентификации пароля:
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
Затем с помощью маршрута я могу убедиться, что пользователь передает auth:
app.get('/api/users',
passport.authenticate('local'),
function(req, res) {
res.json({ ... });
});
Но скажем, вам нужно иметь ADMIN acess для доступа /api/users. Нужно ли писать собственные стратегии? IE мне нужно иметь стратегию локального пользователя и локального администратора, и в каждой проверять правильные уровни доступа?
Я думаю, что я могу сделать это довольно легко, но проблема возникает, когда мне нужно, чтобы мой сайт имел разные методы auth (возможно, иногда использовал oauth), мне нужно было бы написать пользовательские * -user, * -admin стратегии для каждого. Похоже на перебор.
Другой вариант - просто проверить доступ/группу на каждом маршруте после аутентификации пользователя. Но я предпочел бы сделать это в средстве, если это возможно.
Спасибо