서브메뉴

접근 제어 시스템

블로그 권한 설정

개요

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

접근 제어 대상 (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");
    

2008/02/13 21:36 2008/02/13 21:36
0개의 걸린 글 과    0개의 댓글이 있습니다.
이 글의 댓글/트랙백 RSS : http://textcube.org/manual/rss/response/21
이 글의 관련글(트랙백) 주소 : http://textcube.org/manual/trackback/21
Comments