Skip to content

AccessControlSystem

Jeongkyu Shin edited this page Sep 24, 2012 · 1 revision

개요

블로그에 접근을 하면 여러가지 권한이 주어지게 됩니다. 그런 권한에 대한 관리를 다루는 것이 이 글의 목적입니다.

접근 제어 대상 (Access Control Object)

세계

  • 같은 DB를 사용하는 모든 블로그를 말합니다. 블로그가 설치된 유형에 따라, 단일블로그와 다중블로그가 있을 수 있습니다.

블로그

  • 세계에는 하나 이상의 블로그가 있을 수 있습니다.

  • 블로그에 씌여진 글을 의미합니다.

댓글

  • 글에 붙여진 댓글 혹은 방명록의 글을 의미 합니다

메뉴

  • 접근할 수 있거나 목록을 볼 수 있는 메뉴들을 의미합니다.

접근 요청 대상 (Access Request Object)

사용자

  • 로그인할 수 있는 권한을 가진 사용자를 말합니다.

권한의 종류

||권한||설명||비고|| ||group.creators||세계를 소유하고, 다중 블로그 사용자를 초대할 권한을 가진 사람|| 최초 계정인 userid가 1인 사람에게 자동 할당된다. 모든 블로그의 owners 권한을 갖지는 않는다. 모든 블로그가 공통으로 갖는 시스템 설정을 변경할 수 있다|| ||group.owners||블로그의 소유자이며 블로그의 팀블로깅할 사람을 초대할 권한을 가진 사람||한 사람을 초대하면, 사용자 ID와 블로그 ID가 생기며 이들은 소유자관계를 맺게 된다. administrators, editors권한을 갖게 된다.|| ||group.administrators||각 블로그의 기본적인 설정값을 관리할 수 있는 사람||owners 혹은 administrators에 의해서 권한 설정을 할 수 있게된다. 다른 사람이 쓴 글은 접근 할 수 없다.|| ||group.editors||하나의 블로그에 속한 글을 관리할 수 있는 사람||블로그의 설정은 건드리지 못한다. 같은 블로그내의 다른 사람의 글은 접근(수정/삭제)할 수 있다|| ||group.writers||하나의 블로그에 속하여 글을 쓸 수 있는 사람||블로그의 설정은 건드리지 못하며, 다른 사람의 글을 제어할 수도 없다||

접근 권한 체인

  • group.creators 는 group.owners 를 포함한다.
  • group.owners는 group.editors, group.administrators를 포함한다.
  • group.editors는 group.writers 권한을 포함한다.
  • group.administrators는 group.writers 권한을 포함한다.
  • group.writers는 group.readers를 포함한다.

접근 권한의 저장

  • 모든 계정은 Users 테이블에 저장된다.
  • group.writers 권한은 Teamblog 테이블에 blogid, userid 에 대한 record가 하나라도 있으면 주어진다.
  • group.owners, group.administrators, group.editors 권한은 접근을 원하는 userid가 접근하려는 blogid에 대한 Teamblog 레코드의 acl을 읽어 이를 이진수로 해석하여 해당 비트가 존재하면 할당이 된다.
  • group.creators 권한은 userid가 "1"인 경우 group.owners 권한을 얻을 때 할당된다.

접근 권한을 주는 방법

  • 예를 들어 userid 5번에 대해서 비밀번호 확인이 된 경우 해당 세션에다 5번이 로그인 했음을 알려주는 기능, 즉, 해당 세션에 5번의 권한을 주는 것은 다음과 같이 합니다.

    Acl::authorize( 'textcube', 5 );

  • 위와 같은 방법으로하면 해당 세션은 5번 사용자가 로그인한 상태가 되며, 5번 사용자가 가지고 있는 모든 블로그의 접근권한을 세션에 읽어 들여 캐싱합니다.

  • 다른 권한과 달리 group.creators는 블로그를 대상으로 하지 않고 세계를 대상으로 한다. 그렇지만, 권한 확인의 편의성을 위해서 모든 블로그의 접근권한 캐시에 group.creators를 주는 방식으로 구현된다.

접근 권한을 확인 하는 방법

  • 예를 들어 어떤 기능에 대해서 관리자 권한이 필요한 경우 다음과 같이 확인한다.

    if ( Acl::check( 'group.administrators' ) ) { /* do your job */ }

디버깅

  • 다음과 같이 config.php에 넣어 주면 화면 하단에 로그인 세션이 덤프되어 출력되므로 접근권한이 어떻게 할당되는지 확인할 수 있다.

    $service['debug_session_dump'] = 1; requireComponent("Needlworks.Function.Debug");

Clone this wiki locally