웹 권한관리 – Linux Chmod 스타일 – 숫자 권한 구분

JWT토큰 ACL 기능 설계중에
payload를 짧게 만들려고 생각하다가 나온 부분

웹사이트 화면이나 API에서 사용할 수 있는 권한의 종류

VIEW
READ
WRITE
MODIFY
DELETE
EXECUTE

서비스에 따라 좀 다른 형태가 추가될 가능성도 있지만 숫자를 늘리면 된다

Chmod Style

--- user ---
r 400
w 200
x 100
--- group ---
r 40
w 20
x 10
--- other ---
r 4
w 2
x 1

여기서 숫자 규칙은..

어떤숫자 조합을 더해도 중복숫자가 없어야한다.

권한에 숫자 부여

VIEW 1
READ 2
WRITE 4
MODIFY 8
DELETE 16
EXECUTE 32

ex1) VIEW,READ = 3
ex2) READ,MODIFY = 10

이런식으로 1개 늘어날 때 마다 숫자가 2배씩 커지고
필요한 권한을 더해서 숫자로 payload에 넣어주면 된다

숫자를 더 줄일 규칙이 있는지 찾아봐야겠다

간단히 계산하는 법

VIEW, READ, WRITE 다 더해도 MODIFY보다 작다.
권한숫자 = AuthNum = AN

ex1) AN = 16 — 16

큰 숫자부터 하나씩 빼서 -가 되면 다음,
+가 나오면 권한체크
0이 되면 종료

근데 어차피 권한이 많지 않으니 매번 계산하는 것 보다 저장 해 놓고 쓰는게 낫겠다.

ACL,Access Control List 접근 제어 목록

사용자별로 권한을 부여하고 그 권한을 바탕으로 접속 허용 여부를 결정하는 것을 말한다.

값은 보통 String을 사용한다.

 

guest, member, admin 세개의 권한이 있다.

사용자들은 위 권한중의 몇 가지(중복가능)의 권한을 가지고 있다.

권한은 사용자가 가진 최상위 권한을 우선 적용한다. 구현하기 나름이지만… member {student, teacher} 이런식으로 포함관계를 갖게 만들수도 있고 {minsu, dongsu}와 같이 수평 개념으로 만들수도 있다.

예1)

연습장에다가 다음의 사용자 이름을 적어본다

이건희, 이재용, {내이름}, 박정희

다음의 사용자가 있다고 가정하고 {guest, admin, member} 세개의 권한을 적당히 줘 본다.

예2)

그럼 다음 기능에 권한을 줘 보자

{사용자목록보기, 공지사항읽기, 공지사항댓글쓰기, 자유게시판 읽기}

(역시 구현하기 나름이지만 기능에 권한을 줄 수도 잇고 페이지에 줄 수도 있다. 도쿠위키의 경우는 페이지에 준다.)

 

이거 대충 보고 dokuwiki를 설치하고 ACL설정을 해 보면 곧 이해가 갈 것이다.

굳이 dokuwiki를 찝어서 말한것은…. 이게 설치하기 쉬우니까