Program Tip

매개 변수를 받아들이는 expressjs 미들웨어 만들기

programtip 2020. 10. 29. 19:13
반응형

매개 변수를 받아들이는 expressjs 미들웨어 만들기


매개 변수를 받아 들일 수있는 미들웨어를 만들려고합니다. 어떻게 할 수 있습니까?

app.get('/hasToBeAdmin', HasRole('Admin'), function(req,res){

})

HasRole = function(role, req, res, next){
   if(role != user.role){
      res.redirect('/NotInRole);
   }

   next();
}

function HasRole(role) {
  return function(req, res, next) {
    if (role !== req.user.role) res.redirect(...);
    else next();
  }
}

또한 동일한 기능의 복사본을 여러 개 만들지 않았는지 확인하고 싶습니다.

function HasRole(role) {
  return HasRole[role] || (HasRole[role] = function(req, res, next) {
    if (role !== req.user.role) res.redirect(...);
    else next();
  })
}

app.get('/hasToBeAdmin', (req, res, next) => {
  hasRole(req, res, next, 'admin');
}, (req,res) => { 
    // regular route 
});

const hasRole = (req, res, next, role) => {
   if(role != user.role){
      res.redirect('/NotInRole');
   }
   next();
};

또는 케이스가 너무 많지 않거나 역할이 문자열이 아닌 경우 :

function HasRole(role) {
  return function(req, res, next) {
    if (role !== req.user.role) res.redirect(...);
    else next();
  })
}

var middlware_hasRoleAdmin = HasRole('admin'); //define router only once

app.get('/hasToBeAdmin', middlware_hasRoleAdmin, function(req,res){

})

다양한 권한 수준이있는 경우 다음과 같이 구성 할 수 있습니다.

const LEVELS = Object.freeze({
  basic: 1,
  pro: 2,
  admin: 3
});

/**
 *  Check if user has the required permission level
 */
module.exports = (role) => {
  return (req, res, next) => {
    if (LEVELS[req.user.role] < LEVELS[role]) return res.status(401).end();
    return next();
  }
}

참고 URL : https://stackoverflow.com/questions/12737148/creating-a-expressjs-middleware-that-accepts-parameters

반응형