[SQL] 명성에 기반 권한 구현 [폐쇄]
SQL명성에 기반 권한 구현 [폐쇄]
나는 프로젝트, 사용자 및 권한을 각 사용자 또는 사용자 그룹이있는 웹 사이트를 만드는거야. 이것이 것은 커뮤니티 협업 도구이며, 나는 4 가지 권한이 :
어떻게, 데이터베이스에 사용자 그룹에 대한 권한 이러한 종류의 시스템을 구현할 수 있을까?
편집 : 그룹 / 권한에 StackOverflow에 같은 평판에 의해 정의됩니다.
편집 2 - 더 자세히 : 각 파일의 요구는 권한이 프로젝트는 새로 생성 된 파일의 기본 권한을해야하고, 또한 MySQL 데이터베이스 권한을 설정해야합니다.
해결법
-
==============================
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.나는이에 대한 과거 Zend_Acl를 사용하고 있습니다. 나는 그것을 추천 할 수 있습니다. 아주 쉽게 구현하는 방법과 사용되는 독립 실행 형이 될 수 인 시도 및 테스트 라이브러리입니다. 당신이 나중에 추가 할 다른 권한 계획이있는 경우이 옵션은 확장 성됩니다.
나는이에 대한 과거 Zend_Acl를 사용하고 있습니다. 나는 그것을 추천 할 수 있습니다. 아주 쉽게 구현하는 방법과 사용되는 독립 실행 형이 될 수 인 시도 및 테스트 라이브러리입니다. 당신이 나중에 추가 할 다른 권한 계획이있는 경우이 옵션은 확장 성됩니다.
-
==============================
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 } }
from https://stackoverflow.com/questions/6005240/implementing-permissions-based-on-reputation by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL에서 문자열의 마지막 문자를 제거? (0) | 2020.07.20 |
---|---|
[SQL] DROP IF는 VS DROP 존재? (0) | 2020.07.20 |
[SQL] 어떻게 널 (null)을 허용하지 않는 PostgreSQL 데이터베이스에 열을 추가 할 수 있습니까? (0) | 2020.07.20 |
[SQL] 인덱스가 존재하지 않을 때 추가 최신 행 결정 [중복] (0) | 2020.07.20 |
[SQL] 조건과 고유 한 카운트 (0) | 2020.07.20 |