2012-03-07 2 views
10

내 Yii 응용 프로그램에서 인증 계층 구조 및 비즈니스 규칙을 코드로 작성하고 사용자, 역할 및 권한을 데이터베이스에 저장하려고합니다. 이것은 비즈니스 로직 (코드 여야 함)과 사용해야하는 정보 (데이터 여야 함)를 구분합니다. Yii는 이것을 지원하지 않는 것으로 보입니다.데이터베이스에 권한 부여 규칙이있는 이유는 무엇입니까?

Yii에서는 비즈니스 로직을 파일 (CPhpAuthManager) 또는 데이터베이스 (CdbAuthManager)에 추가 할 수 있습니다. 어느 쪽이든, 비즈니스 로직을 데이터로 간주합니다. Yii는 실제로 비즈니스 논리를 문자열로 검색 한 다음 eval을 통해 실행합니다.이 작업은 끔찍한 방법입니다.

왜 그럴까요?

원하는 결과를 얻으려면 어떻게해야합니까?

답변

2

비즈니스 로직을위한 PHP 코드에 원하는만큼 많은 논리를 넣을 수 있습니다. Yii는이 논리를 추가하는 여러 가지 방법을 지원합니다. LoginForm.php, UserIdentity.php, SiteController.php, ... 여기에는 제한이 없습니다.

Yii가 지원하는 기능은 RBAC에 논리 조각을 추가하는 것입니다. 일반적인 사용 사례는 기본적으로 bizRules를 사용하여 사이트의 모든 사용자에게 '인증 된 사용자'와 '게스트'라는 두 가지 규칙을 할당한다는 것입니다. '인증'

return !Yii::app()->user->isGuest; 

'고객'과 같은하여 BizRule을 가지고 당신의 이상 '손님'하지만이 '인증'하지 않은 사용자에 로그인 한,

return Yii::app()->user->isGuest; 

결과물은 가지고 있지만. 당신이 코드 대 데이터베이스에 아무것도 넣어 것입니다 왜 또 다른 예는

return $model->id === Yii::app()->user->id; 
+0

설명해 주시겠습니까? bizRules가 데이터베이스에 있어야하는 이유는 무엇입니까? –

+0

위에서 언급했듯이 ... 당신은 PHP 코드로 로직을 옮길 수 있습니다. 위의 시나리오는 대량 할당 역할 (또는 작업 또는 작업)이있는 유스 케이스를 설명합니다. 'CanEditOwnPost'와 같은 항목을 checkAccess()하면 * 현재 * 게시물이 사용자에게 속하는지 확인해야합니다. '정적'항목을 사용하여 수행 할 수 없습니다. PHP 코드를 검사하고 아이템을 할당하거나 ... bizRule을 데이터베이스에 추가하면이 체크가 수행됩니다. – schmunk

+0

데이터베이스의 코드가 eval 된 것처럼 여전히 이해가되지 않습니다. 이것이 컨트롤러 또는 뭔가에 있다면 더 좋을 것입니다. –

1

같은 현재 사용자들만 편집 가능한 사용자 프로필 편집보기를, 것입니까?

비 개발자가 편집 할 수 있도록 한 가지 좋은 이유가 있습니다.

Google 앱에서는 사용자가 자신의 사용자 및 항목에 대한 권한을 관리 할 수 ​​있도록 허용합니다.

yii의 rbac 비즈니스 규칙을 사용할 필요가 없습니다. 몇 가지 다른 역할과 작업을 말하고 나머지 인증 논리를 코드에 포함시킬 수 있습니다.

+1

비 개발자가 코드를 편집하는 아이디어는 논증으로별로 의미가 없습니다. – hakre