반응형
매개 변수를 받아들이는 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
반응형
'Program Tip' 카테고리의 다른 글
mongodb에서 자식 개체를 쿼리하는 방법 (0) | 2020.10.29 |
---|---|
사용자 지정 .gitignore를 가질 수 있습니까? (0) | 2020.10.29 |
실행중인 Docker 컨테이너에서 파일 및 stdout을 읽는 방법 (0) | 2020.10.29 |
C에서 데이터 유형의 최소 및 최대 값 (0) | 2020.10.29 |
ANSI 색상 코드를 존중하는 Eclipse 콘솔보기? (0) | 2020.10.29 |