2010-05-12 3 views
4

사용자 유형 A, B, C의 세 가지 유형이 있습니다. 따라서 사용자 기본 클래스와 파생 클래스가 3 개 있습니다. 그러나 사용자가 동시에 2 가지 유형이 될 수 있습니다. 어떻게하면 사용자의 유형 (들)이 응용 프로그램에있는 액세스의 종류를 정의 할 것인지를 명심하면서 적절한 방식으로이를 처리 할 수 ​​있습니까?PHP 객체 지향 - 여러 사용자 역할을 구현하는 가장 좋은 방법

답변

5

나는 decorator pattern을 사용합니다.

$user = new User(); 
$user = new Role1 ($user); 
$user = new Role2 ($user); 
3

젠드 프레임 워크의 ACL 클래스를 살펴 보았습니다. 다른 사용자를 위해 여러 역할을 수행 할 때 유용합니다. 또한 Zend ACL의 사용에 대해 논의하는 많은 기사와 블로그가 있습니다. ACL에 대한 자세한 일반 : wikipedia - role-based access control

+1

제안을 주셔서 감사합니다, 그러나 나는 당신이 나를 위해 플랫폼 솔루션을 찾고 있지 않다는 것을 알고 있다고 확신합니다. 나는이 문제를 개념적 수준에서 어떻게 다루는 것이 가장 좋은지 이해하고 싶다. –

+2

그래, 나는 당신이 상자 솔루션을 찾고 있지 않다는 것을 이해하고, 나는 당신이 zend 프레임 워크에서 그것을하는 방식을 살펴 보았다고 제안했다. 좋은 예를 살펴 봄으로써 개념을 이해하는 것이 더 쉬워지고, imho zend 프레임 워크는 문서화 된 acl을 잘 구현하고 있습니다. 게시물에 좀 더 일반적인 링크를 붙여 넣었습니다 + 비슷한 방식으로 접근하는 링크 기반 액세스 제어. 건배, Jørgen – rakke

+1

+1 건식 원칙을 제안합니다. 나는 또한 Zend_Auth + Zend_Acl 솔루션이 유용하다고 생각한다. – nuqqsa

5

어쩌면 당신은 당신의 디자인을 재정의해야합니다 wikipedia - acl

서로 다른 역할과 권한을 다루는 또 다른 방법은 역할 기반 액세스 컨트롤입니다. 나는 두 개의 클래스를 정의하는 것이 바람직 할 것입니다라고 말하고 싶지만 :

  • 역할 클래스
  • 사용자 클래스

사용자 클래스는 다음 역할의 컬렉션을 가질 수 있습니다. 그러면 전체 디자인이 더 간단하고 깨끗해질 것입니다.

사용자는 하나 또는 다른 역할을 가질 수 있습니다. 그러나 사용자는 본질적으로 가질 수있는 역할이 아닙니다. 그것은 단지 역할을 맡을 수있는 능력을 가지고 있습니다.

물론 다른 포스터에서 말한대로 데코레이터 패턴을 사용할 수 있습니다.

+0

이 디자인이 마음에 들면 내 사이트에서이 디자인을 사용하려고합니다. – JimDaniel

관련 문제