• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

안녕하세요

20.07.15 17:57 작성 조회수 94

0

안녕하세요 강의를 다 완강하고 프론트가 SSR인 템플릿 엔진으로 구성되어 있던  노드 서버를 리팩토링 중에 있습니다.

궁금한게 있어서  여쭈어 봅니다.

관리자 페이지를 따로 구성하려고 하는데, SPA 에서는 접근 권한을 어떻게 설정하는게 좋은가요?

유저의 role 을 다르게 설정하여 라우팅을 관리하는것 같은데, SPA의 특성상 모든 페이지를 다 받아 오는것이니 충분히 클라이언트에서 state에 있는 role 을조작이 가능할 것 같다는 생각이 드는데, 이 경우 백엔드에서 한번 더 필터링이 필요하다 생각됩니다. 선생님은 어떠한 식으로 실무에서 서버에서 거르시는지 궁급합니다.

연장선에 있는 이야기 같은데, 현재 passport를 이용하여 session을 캐싱하여 사용하고 있습니다. 이 경우 hoc를 이용하여 페이지 라우팅 마다 Axios를 통한 http response 값에서 리덕스 스토어에 dispatch 할 때, body 값인 payload: request 뿐만 아니라 cookie 값도 따로 리덕스 스토어에 저장해서 관리하면 되는 걸까요?

감사합니다!

답변 2

·

답변을 작성해보세요.

0

최현성님의 프로필

최현성

질문자

2020.07.19

감사합니다! 강의 덕분에 실력이 많이 늘었어요 ~! 좋은하루되세요 :)

0

안녕하세요 ^^  

되게 멋있으시네요 !! 
우선  프론트에서 필터링 같은경우는 현재 하고 있듯이 라우팅 제한으로 하시면 되시고,
백엔드에서는 따로 middleware를 만드셔서 필터링이 가능합니다 ^^ 

현재 여기서는 auth 라는 미들웨어를 만들었잔아요 ?
거기에 하나더 admin이라는 미들웨어를 만들수 있겠네요 ! 

middleware 폴더 안에 

admin.js 라는 파일을 만든후에 

let admin = (req,res,next) => {
if(req.user.role === 0 ){
return res.send('관리자만 사용 할수 있는 기능입니다.')
}
next()
}

module.exports = { admin }

//if you want to make more roles
// if(req.user.role === 1 ){
// return res.send('you are not allowed, get out now')
// }

이런식으로  role에 따라서 관리해주시면 됩니다. 

그래서 이 미들웨어를 

router.post("/updateEmail", auth, admin, (req, res) => {

이런식으로 적용해주시면 됩니다 ! 

아 그리고 cookie 는 저장 위치는 개인의 선호에 따라  달리 하셔도 됩니다. 
리덕스에 저장하셔도 되고 기본적으로 저장되는 곳에 해서 관리하셔도 됩니다 ~ !