2011-04-18 5 views
6

내가 여러 모듈을해야합니다 사이트에 일하고 있어요 설계 그 중 하나를 특정 사용자에게 완전히 사용할 수, 반 다른 사용자에게 제공하고, 나머지를 사용할 수 없습니다. 예를 들어사용자 액세스/권한 클래스

:

  • 에 '직원은'그에게 할당 된 고객 지원 티켓에 응답 할 수 있습니다.

  • A '관리자'특정 직원의 티켓을 볼 포함한 팀의 모든 직원과 지원 티켓을 관리 할 수 ​​있습니다.

  • 에 '관리자'는 다른 핵심 기능뿐만 아니라, 모든 팀의 모든 관리자, 직원, 티켓을 관리 할 수 ​​있습니다.

또한 일부 페이지에는 현재 사용자가 관리자 또는 관리자 인 경우 몇 가지 추가 필드가 표시됩니다. (예 : 사물을 삭제/표시하는 링크). 직원에게 표시되지 않습니다. 사용자가 현재 페이지에 액세스하거나 할 수없는 경우 결정

  • :

    나는에 대한 논리를 처리 할 하나의 '권한'모델을 만들려고합니다.

  • 페이지의 특정 부분이 표시 아닌지 여부를 결정한다. 예 : 관리자/관리자에게만 표시되도록 편집/삭제하기위한 특수 링크

이 클래스를 디자인 할 때 몇 가지 권장 사항/조언이 필요합니다. 특히 두 번째 요구 사항을 충족시키기 위해 어떤 방법이 있어야합니다.

답변

3

내가 올 때이 문제에 접근 한 방법은 취할 수있는 각 작업 또는 자신의 것으로 표시 될 수있는 정보를 제공하는 것입니다. Permission. 각 UserPermissions의 컬렉션이 있습니다. 이로부터, 당신은 같은 계층 구조 또는 권한의 범주로 존재하게 권한의 거대한 수를 관리 할 수 ​​있도록 구조의 다른 레이어를 추가 할 수 있습니다.

그 자리에 있으면, 당신은 여러 부분이있는 User에게 그들이 필요한 허가 (들)이있는 경우, 또는 당신은 PermissionManagerUserPermissions의 집합을 가지고 결정할 수 있습니다 할 수 있습니다 주어진 사용자의 경우 필요한 경우 Permissions이 필요합니다. 어느 쪽이든 제대로 작동하지만 선택하는 것은 종속성 및 시스템 아키텍처에 영향을 미칩니다.

PermissionManager 접근 방식은 응용 프로그램 조각이 User에 의존 할 필요가없는 장점이있다, 그래서 모든 권한이 적절한 경우 다른 사용 권한이 적절하지 않는 경우 항상 False를 반환 PermissionManager, 또는 True를 사용할 수 있습니다.

간단한 상황에서이 접근법은 과도 함일 수 있으며 처음에는 그런 것처럼 보입니다. 그러나 기본적인 계층 적 또는 거친 역할을 사용하는 경로를 밟았으며 사실상 모든 시스템에서 작동했습니다. 빨리 바꿀 수있는 미리 만들어진 역할 기반 권한 시스템에 대해 너무 복잡해졌습니다.

+0

@cdeszaaq 어떻게/어디 그 권한을 저장해야? 그들이 어떻게 계층/범주로 조직 될 수 있습니까? 또한이를 식별하는 권한에 대해 어떤 종류의 명명 규칙을 사용해야합니까? –

+0

@ Upvote 클릭 - 당신이 데이터베이스를 사용한다고 가정하면, 다른 데이터 구조를 저장하는 것과 같은 방식으로 모든 곳에 거기에 사용 권한이 저장됩니다. 명명 규칙에있어 일관성이있는 한 무엇이든 효과가 있지만 권한 유형에 동사가있는 "canDoX"스타일을 따르는 경향이 있습니다. – cdeszaq

+0

@click upvote 당신이 오래 전에 생각한 바에 따르면 RBAC – xenoterracide

0

저는 여러분이 역할을 수행해야한다고 생각합니다.직원, 관리자 및 관리자로 구성됩니다. 그래서 이것들을 가진 역할 테이블이 할 것입니다. 그런 다음 특정 작업/퍼미션에 대해 분기 논리를 사용해야합니다. 예를 들어 직원의 경우 User.IsInRole ("employee")가 인 경우 // 고객 지원 티켓을 처리하는 로직을 삽입하십시오. else if 사용자 .IsInRole ("관리자") // 삽입 로직은 관리자의 책임과 사용자 테이블 및 역할 테이블 모두 이것을 달성하기 위해

그래서 당신이 필요로하는 관리자의 책임을 다루는

마지막으로 로직을 처리합니다. 호프 도움이

3

데이터베이스 관점에서 내 접근 방식은 사용자 목록, 역할 목록에 대한 역할 테이블 예 : 직원, 관리자, 관리자를 보유하는 사용자 테이블을 가질 것입니다; 시스템에서 사용 가능한 모든 작업/기능의 모든 값과 특정 역할 (예 : admin)에 대한 권한을 저장하는 권한 테이블은 만들기, 수정, 삭제,보기와 같은 작업/기능의 값이 모두 true입니다. 관계는 아래에서 볼 수 있지만 (N) ---- (N)은 다 - 대 - 다 관계입니다.

사용자 (N) ------- (N) 역할 (N) -------- (N) 권한

관련 문제