평판에 기반한 권한 구현
각 사용자 또는 사용자 그룹에 대한 프로젝트, 사용자 및 권한이 있는 웹 사이트를 만들고 있습니다.이것은 커뮤니티 협업 도구이며, 저는 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
'programing' 카테고리의 다른 글
이 mysql 오류 코드 #1089가 계속 표시됩니다. (0) | 2023.07.26 |
---|---|
PDO 준비문은 얼마나 안전합니까? (0) | 2023.07.26 |
ASP를 통해 파일을 업로드하려면 어떻게 해야 합니까?NET MVC와 진행 표시줄을 표시하시겠습니까? (0) | 2023.07.26 |
오라클 11g에 무제한 문자를 저장하는 방법은 무엇입니까? (0) | 2023.07.26 |
ES6/Node 4에서 인터페이스를 생성할 수 있는 방법이 있습니까? (0) | 2023.07.26 |