Javascript 使用';passport.isAuthenticated()';检查NodeJ中的多个用户角色

Javascript 使用';passport.isAuthenticated()';检查NodeJ中的多个用户角色,javascript,node.js,express,passport.js,passport-local,Javascript,Node.js,Express,Passport.js,Passport Local,这是我的isAuthenticated函数: var isAuthenticated = function (req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); }; 下面是一个使用PassportJsisAuthenticated()函数呈现视图的方法 router.get('/', isAuthenticated, function (req, res, next) {

这是我的
isAuthenticated
函数:

var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated()) return next();
    res.redirect('/');
};
下面是一个使用PassportJs
isAuthenticated()
函数呈现视图的方法

router.get('/', isAuthenticated, function (req, res, next) {
    res.render('dashboard');
});
isAuthenticated
函数将为所有登录用户呈现该视图。类似地,我想要一些只有管理员用户才能访问的其他视图。在这种情况下,我可以使用相同的功能来实现这一点,而不是创建单独的策略或功能吗


比如将用户角色作为参数提供给
isAuthenticated
函数,并在函数中进行额外检查,以检查请求中的用户对象是否与参数中提供的角色相同?或任何其他类似的方式来避免编写另一个单独的功能/策略?还有,首选的最佳方法是什么?如果有人能详细解释,我将不胜感激。

Passport将用户信息存储在会话中,并使用这两个会话对用户进行序列化和反序列化

passport.serializeUser(function (req, user, done) {
    //Check user permission here and assign to user object.
    //user.permission = "user_permission"
    return done(null, user);
});

passport.deserializeUser(function (req, user, done) {
    done(null, user);
});
在auth函数中,您可以检查权限,如下所示:

var isAuthenticated = function (req, res, next) {
  if (req.isAuthenticated()){
    if(req.user.permission === 'user_permission'){
       //route for admin
    }else{
       //rote for non-admin
    }
  }else{
    res.redirect('/');
  } 
};

谢谢,但我觉得有点混乱
IsAuthenticated
是一个单一(某种)全局函数,我们将其用作所有路由的中间件,这些路由只需要经过身份验证的用户访问。有一个页面(比如仪表板),管理员用户只能访问该页面,因此我如何在这里使用相同的功能?isAuthenticated检查用户是否经过身份验证可以访问该网站,然后我们进行另一次权限检查,检查用户是否有资格访问该特定页面。比如,有两个路由
profile
dashboard
,我们想让所有登录用户访问
profile
路由,但只有管理员用户可以访问
dashboard
路由。我们如何在这两种情况下使用相同的
isauthenticated
函数?