2012-06-05 3 views
4

현재 진행중인 프로젝트는 웹 응용 프로그램으로, 자체 서버의 여러 고객에게 제공해야합니다. 이 웹 사이트에는 사용자가 사용할 수 있거나 사용할 수없는 영역과 기능을 관리하는 권한 제어 시스템이 필요합니다.
알다시피, 데이터베이스에 저장된 사용 권한 시스템을 사용하여 데이터베이스 기반의 사용 권한 시스템을 설계하고 있습니다. 모든 사용자에게 역할이 있습니다. 역할은 사용 가능한 목록 사용 권한을 정의합니다. 스키마는 다음과 같습니다웹 사이트 권한 시스템에 대한 모범 사례

사용자 테이블
1 USER_ID
2. 이름
3.

역할 ROLE_ID
1.
테이블을 ROLE_ID
2. 이름

허가
1. permission_id
2. 이름

roles_permissions 테이블 :
1.
2. I 사용자 역할과 권한을 로그인을 불러오는 것 코드에서

을 permission_id ROLE_ID, 사용자가 있는지 확인 행동을 수행하거나 그렇게 볼 수있는 영역 :

if($user->hasPermission('Edit HR')) { 
    // let user see the editing HR section 
} 

hasPermission은 사용자에게 다음과 같은 권한이 있는지 확인합니다. 이름 'Edit HR'을 입력하고 필요한 결과를 반환합니다. 내가 보는 문제는 데이터베이스 테이블에 'Edit_hr'또는 'HR Editing'이 아닌 'Edit HR'이라는 이름의 권한 레코드가 있어야한다는 것입니다. 따라서 사용 권한 시스템의 데이터가 응용 프로그램이 사용하는 모든 데이터베이스에 대해 동일한 지 확인해야합니다. 어떤 종류의 결함이 있다고 생각하니 다시 설계해야합니다. 새 섹션 및 기능을 만들면 모든 데이터베이스를 업데이트해야하므로 나도 슬픈 팬더가됩니다.

기본적으로 질문은 다음과 같습니다. 데이터베이스 기반 권한 시스템을 설계하고 여러 데이터베이스에서 데이터베이스 무결성을 유지하는 가장 좋은 방법은 무엇입니까?

+0

나는 테이블'role','resource', 그리고'permission' 부를 것이다, 디자인을 명확히합니다. 권한 테이블은 role_id'와'resource_id''에 외부 키를 포함 할 것, 어떤 항목이 존재하는 경우는 그 역할이 해당 자원에 연결되어 알고있다. 이미 FK의 이름을'[표] _id'이 있기 때문에 또한, 나는 각 PK'id'을 부를 것이다. – Xeoncross

+0

사용자는 하나 개의 역할을 할 수 있습니까? 한 범주의 편집자이자 다른 범주의 검토자인 사람은 어떻습니까? :) –

+0

이것은 좋은 문제는 당신이 역할, 프로세스 및 사용자가 하나의 사용자 또는 사용자 그룹에 더 많은 권한을 추가하거나 한 사용자로부터 만 permiss를 제외해야 할 경우 설명이 필요하다면이 스키마를 얻으시겠습니까 inted : http://stackoverflow.com/questions/37466333/php-mysql-sesion-good-practice-user-management-and-permissions –

답변

1

당신이 생각해 낸 구성표가 멋지게 나옵니다. 내가 추가 할 수있는 유일한 것은 permissions 테이블에 tag 또는 유사한 필드를 추가하는 것입니다.

허가 tagEDIT_HR과 같을 것이며이 코드는 name 대신 참조로 사용합니다. 표시 목적으로 name을 사용하십시오 (예 : HR Editing). 이렇게하면 이름이 달라질 수 있으며 코드에 영향을 미치지 않습니다.

0

내가 사용중인 솔루션은 생성시 사용 권한 테이블을 읽고이를 위해 유효한 모든 사용 권한 작업을 저장하는 전역 $ current_user 개체를 갖는 것입니다. 이 배열은 작업을 확인해야 할 때마다 검색됩니다. 글로벌 객체에 이러한 종류의 데이터를 저장하는 것과 관련된 보안 문제가있는 경우 DB 쿼리를 저장하지 않지만 찾지 못했습니다.

필요한 경우에만 1dB 테이블 (샘플)있다 :

user_id | user_role | user_action 
--------------------------------- 
0  | 10  | view_dashboard 
0  | 1  | view_users 

사용자 역할은 최소한의 사용자 유형 (관리자, 편집자, 방문자 등) USER_ROLE> = $의 CURRENT_USER 역할 때문에 모든 작업에 해당 사용할 수 있습니다. USER_ID 열은 특정 사용자에 대한 특정 레벨을 대체 할 수 있습니다. 이런 종류의 설정으로

은, 모든 권한을 나열하고 사용자가 간단한 드롭 다운에 값을 수정 할 수있는 페이지가 (그러나 모든 사용자가 그렇게 할 수 없습니다 있는지 확인)도 쉽다.

관련 문제