본 게시물은 시스템에 대한 사용자 및 권한에 대해 지극히 개인적인 정리를 담고자 하는 블로그 입니다. 조언이나 태클 환영합니다. 다음은 본 게시물과 관련된 다른 블로그 입니다.
- 사용자 그리고 권한에 대한 단상
Permission (권한)
시스템을 사용하다 보면 많은 종류의 권한들이 필요하게 된다. 단순하게 생각하면 CRUD 정도가 되겠다. 헌데 이 CRUD 를 어디까지 적용할 것이냐를 고민해보면 문제는 쉽지가 않다. 예를 들어 일반 사용자는 특정 게시판에 대하여 CRUD 권한을 갖는다. 헌데 자신만 사용할 수 있는 게시판을 따로 모아서 볼 수 있는 기능이 사이트에 존재한다면? 일종의 즐겨 찾기 정도라고 볼 수도 있을 터인데 고객은 이런 설정을 특별한 몇몇 사용자 부류에게만 주고 싶다고 한다면? 혹은 몇몇 사용자 부류는 관리자가 정한 몇몇 가지의 즐겨찾기 정보에만 액세스가 필요하다면? 그렇다면 반드시 즐겨찾기 기능 사용 여부에 대해 별도의 CRUD 권한이 필요하게 된다. 이와 같이 권한은 어떤 기능에 어떻게 적용할 것인가를 생각해보면 굉장히 복잡해 진다. 또한 사용상의 권한 뿐만 아니라 관리상의 권한도 여러가지가 있을 수 있다. 메뉴에 대한 편집 권한, 사용자 혹은 그룹에 대한 편집권한, 시스템에서 사용하게 될 코드 편집에 대한 권한, 몇몇 카테고리 정보에 대한 편집 권한, 권한을 편집할 수 있느 권한 등등등... 자세히 나열하면 나열할수록 굉장히 많은 권한들이 필요 하게 된다. 이와 같이 사용자의 분류와 시스템의 기능 설계에 따라 굉장히 많은 권한들이 필요하게 된다. 허나 우리의 목표는 여러가지의 권한이 필요하게 되더라도 단일화된 모델을 가져가야 한다는 것이 되겠다.
Permission Set (권한모음) >> Role Definition(역할정의)
지난 포스트에서는 Permission Set(권한모음) 이라는 의미로 정의하려 하였으나 생각하면 생각할수록 이름이 마음에 들지 않는다. 사실 Permission 이라는 단어 또한 Right 라는 용어로 쓰이기도 한다는 걸 우리는 이미 알고 있지 않은가. 단어 생각하다가 블로그 쓰기 시작한지 한두시간이 지났는데 겨우 여기까지… 암튼 권한모음을 역할정의 라는 단어로 바꾼다 하더라도 어쨌거나 의도하는 바는 기 생성된 권한을 조합하여 일종의 권한 모음을 만든다는 것 이다. 사실 Role Definition 이라는 단어는 SharePoint 의 Security Model 에 있는 것을 보고 적절한 용어라 생각되어 참고한 것이라는 것을 고백한다. 참고한 김에 역할정의 라는 용어에 이해를 돕기위해 한번 더 참고하자면 SharePoint 에는 기본적으로 아래와 같은 역할정의를 제공한다.
음 그런데 생각해보면 권한이라는 것이 이미 존재하며 사용자 라는 객체 이외에 사용자 그룹이라는 객체를 생성 할 것이므로 권한에 대한 역할정의가 필요할까 라는 의문이 든다. 좀더 풀어서 얘기하면 좋긴 한데 어디에 쓸껀데? 같은 의문 이랄까?! 아직 섣불리 판단하긴 이르다. 다만 시스템상에서 이런 종류의 권한 모델을 지원한다면 사이트 그룹의 권한을 그대로 유지하면서 기능별로 권한을 제한할 수 있는 모델을 만들 수 있을 것 같다는 생각이다. 하지만 개념상 좋은 것이라 할지라도 실제로 구현을 하다 보면 나쁜 설계가 될 수도 있겠다. 예를 들어 좋은 모델을 가져가더라도 성능이 무지하게 떨어진다면 그것은 좋은 설계가 아니다. (독설하자면 Entity Framework 1.x 부터 3 정도 까지?ㅋ 현재도 계속 업데이트 되고 있다고 하긴 하는데 젠장. 언제까지 업데만 할꺼냐…) 암튼 이건 아래 그림이 나올 정도로 자연스럽게 다듬어 지지 않는다면 빠질 수도 있겠다.

- SharePoint Foundation Security : http://msdn.microsoft.com/en-us/library/ee537811.aspx





덧글