programing

평판에 기반한 권한 구현

starjava 2023. 7. 26. 21:32
반응형

평판에 기반한 권한 구현

각 사용자 또는 사용자 그룹에 대한 프로젝트, 사용자 및 권한이 있는 웹 사이트를 만들고 있습니다.이것은 커뮤니티 협업 도구이며, 저는 4가지 권한이 있습니다.

  • 작성자 - 변경, 변경 허용, 권한 변경
  • 변경사항 수락
  • 변경
  • 보다

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

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

편집 2 - 자세한 내용:각 파일에는 권한이 있어야 하고, 프로젝트에는 새로 만든 파일에 대한 기본 권한이 있어야 하며, MySQL 데이터베이스 권한도 설정해야 합니다.

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 레코드만 필요합니다.

저는 이것을 위해 과거에 Zend_Acl을 사용한 적이 있습니다.추천해드릴 수 있습니다.테스트 및 테스트를 거친 라이브러리로, 구현이 매우 쉽고 독립 실행형으로 사용할 수 있습니다.나중에 추가할 사용 권한 체계가 다른 경우 이 옵션은 잘 확장됩니다.

두 개의 테이블을 만듭니다. 사용자와 순위입니다.

User
-----
id
username
rankID


Ranks
------
id
makeChanges
acceptChanges
changePermissions
view

그런 다음 Ranks 테이블에서 원하는 다양한 순위를 만들고 순위를 설정합니다.원하는 사용자와 일치할 사용자의 ID입니다.순위 테이블에서 각 필드의 값을 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
    }
}

언급URL : https://stackoverflow.com/questions/6005240/implementing-permissions-based-on-reputation

반응형