-
Notifications
You must be signed in to change notification settings - Fork 55
AccessControlSystem
블로그에 접근을 하면 여러가지 권한이 주어지게 됩니다. 그런 권한에 대한 관리를 다루는 것이 이 글의 목적입니다.
- 같은 DB를 사용하는 모든 블로그를 말합니다. 블로그가 설치된 유형에 따라, 단일블로그와 다중블로그가 있을 수 있습니다.
- 세계에는 하나 이상의 블로그가 있을 수 있습니다.
- 블로그에 씌여진 글을 의미합니다.
- 글에 붙여진 댓글 혹은 방명록의 글을 의미 합니다
- 접근할 수 있거나 목록을 볼 수 있는 메뉴들을 의미합니다.
- 로그인할 수 있는 권한을 가진 사용자를 말합니다.
||권한||설명||비고|| ||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");
- Source | Wiki Front | Main | Notice