복붙노트

[SQL] 명성에 기반 권한 구현 [폐쇄]

SQL

명성에 기반 권한 구현 [폐쇄]

나는 프로젝트, 사용자 및 권한을 각 사용자 또는 사용자 그룹이있는 웹 사이트를 만드는거야. 이것이 것은 커뮤니티 협업 도구이며, 나는 4 가지 권한이 :

어떻게, 데이터베이스에 사용자 그룹에 대한 권한 이러한 종류의 시스템을 구현할 수 있을까?

편집 : 그룹 / 권한에 StackOverflow에 같은 평판에 의해 정의됩니다.

편집 2 - 더 자세히 : 각 파일의 요구는 권한이 프로젝트는 새로 생성 된 파일의 기본 권한을해야하고, 또한 MySQL 데이터베이스 권한을 설정해야합니다.

해결법

  1. ==============================

    1.

    user_table
    id, etc
    
    permission table
    id, user_id, permission_type
    

    이 구조로, 각 사용자는 자신의 계정, 그들에 액세스 할 수 있습니다 각 기능 세트 하나와 연관된 여러 권한 유형을 가질 수 있습니다. 당신은 권한의 새로운 유형을 추가하기 위해 테이블 ​​구조를 변경할 필요가 없습니다 것입니다.

    더 이것을 단계를 수행하려면 권한의 각 유형의 진수를 만들 수 있습니다. 사용 권한 세트를 만들 수있는이 방법은 비트 연산자를 사용하여 하나의 정수로 표현 될 수있다.

    예를 들어 당신은 상수가 있다면

    PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
    PERMISSION_MAKE_CHANGES = bindec('010') = 2
    PERMISSION_ACCEPT_CHANGES = bindec('100') = 4
    

    당신이 비트 연산자를 사용하여 정수 하나에이 값을 결합 할 수 있습니다 "|"

    (PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions
    

    그들은 특정 권한이있는 경우, "&"는 비트 연산자를 사용 확인

    ($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true
    

    당신이를 한 경우에, 당신은 단지 권한의 각 세트에 대해 하나 개의 DB를 기록해야합니다.

  2. ==============================

    2.나는이에 대한 과거 Zend_Acl를 사용하고 있습니다. 나는 그것을 추천 할 수 있습니다. 아주 쉽게 구현하는 방법과 사용되는 독립 실행 형이 될 수 인 시도 및 테스트 라이브러리입니다. 당신이 나중에 추가 할 다른 권한 계획이있는 경우이 옵션은 확장 성됩니다.

    나는이에 대한 과거 Zend_Acl를 사용하고 있습니다. 나는 그것을 추천 할 수 있습니다. 아주 쉽게 구현하는 방법과 사용되는 독립 실행 형이 될 수 인 시도 및 테스트 라이브러리입니다. 당신이 나중에 추가 할 다른 권한 계획이있는 경우이 옵션은 확장 성됩니다.

  3. ==============================

    3.나는 두 테이블을 만들 것이다 사용자와 계급.

    나는 두 테이블을 만들 것이다 사용자와 계급.

    User
    -----
    id
    username
    rankID
    
    
    Ranks
    ------
    id
    makeChanges
    acceptChanges
    changePermissions
    view
    

    그런 다음 당신이 순위 테이블에 원하는 다양한 계급을 만들고 원하는 해당 하나와 일치하는 사용자의 rankID을 설정합니다. 반드시 0 또는 1의 값으로 순위 테이블의 각 필드를 설정할 수 있도록; 0 그 능력을 가지고 있지 인 1 해당 옵션을 갖는.

    편집 당신은 당신이 PHP5의 클래스 또는 인스턴스와 함께 할 줄 수있는 데이터베이스없이이 작업을 수행 할 거라고합니다. 예를 들어, 당신이 당신이 원래 게시물에 가지고있는 것들의 각각의 이름을 설정했다고 가정 해 봅시다 :

    Creator - make changes, accept changes, change permissions
    Reviewer - Accept changes
    Editor - Make changes
    Regular - View
    

    그럼 당신은 다음과 같이 할 수 있습니다. (데이터베이스 방법은 분명히 더 나은 방법이 될 것입니다, 그러나 이것은 단지 예입니다.)

    class Regular
    {
        public function View()
        {
            //Do the view stuff in here
        }
    }
    
    class Editor extends Regular implements Edit
    {
    
    }
    
    class Reviewer extends Regular implements Review
    {
    
    }
    
    interface Review
    {
        public function AcceptChanges()
        {
            //Do the accept changes here
        }
    }
    
    interface Edit
    {
        public function MakeChanges()
        {
            //Do the make changes stuff here
        }
    }
    
    
    class Creator extends Regular implements Edit, Review
    {
        public function ChangePermissions()
        {
            //Do the change permissions stuff here
        }
    }
    
  4. from https://stackoverflow.com/questions/6005240/implementing-permissions-based-on-reputation by cc-by-sa and MIT license