"관리자"및 "관리자"를 만들고 업데이트 할 수있는 두 수준의 관리자가 있습니다.Yii : 사용자 역할에 따라 다른 범위 사용
내 User _form.php에 내 계정 수준의 "user_type"드롭 다운이 있습니다.
관리자가 "관리자"계정을 만들지 못하게하고 사용자가 자신의 레코드를 업데이트 할 때 해당 드롭 다운을 완전히 숨기려고합니다.
) 규칙()을 사용하여이 동작을 제어하는 방법이 있습니까?
'hideAdmin' => array(
'condition' => 'user_type != "Admin"',
),
를 다음과 같이 보입니다 "scopeToUse()"라는 내 모델의 공개 방법 작성 :
public function scopeToUse() {
$scope = 'hideAdmin()';
if(Yii::app()->authManager->checkAccess('Admin', Yii::app()->user->id)) {
$scope = 'orderAsc()';
}
return $scope;
}
을 b)는 I는 다음과 같이 보일 것 "hideAdmin"라는 범위를 만드는 방법에 대해 생각
마지막으로 이와 같은 드롭 다운 목록을 만듭니다.
<?php echo $form->dropDownList($model,'user_type_id',
CHtml::listData(UserType::model()->scopeToUse()->findAll(),'id','user_type')); ?>
내가 범위 이름을 반환 'scopeToUse()를'기대했다 및 작동,하지만 난 그냥이 다시 받고 결국 :
Fatal error: Call to a member function findAll() on a non-object
올바른 방법에 어떤 생각이이 일을 ?
편집
내가 @가 Rafay - 지아 - 미르에서 큐를 복용 및 사용 권한을 확인하고 내가 원하는 범위와 함께 적절한 CHTML ::이 listData을 돌려 내 사용자 클래스에 새로운 방법을 만들어 결국 . 정확히 의도 한 바가 아니었지만 최종 결과는 같았습니다. 내보기에는 너무 많은 코드를 넣지 않아서 선택 기준을 복제하는 대신 내 범위를 사용할 수있었습니다.
public function userTypeDropdown() {
if(Yii::app()->authManager->checkAccess('Admin',Yii::app()->user->id)) {
$listData = CHtml::listData(UserType::model()->findAll(),'id','user_type');
} else {
$listData = CHtml::listData(UserType::model()->hideAdmin()->findAll(),'id','user_type');
};
return $listData;
}
를 사용할 수 있습니다. –
findAll은 CActiveRecord 기본 클래스의 메서드이지만 함수를 호출하는 경우 –
맞아요, 어떻게 작동 시킬지 모르겠습니다. UserType :: model() -> hideAdmin() -> findAll을 수행하면 작동합니다. 그렇다면 나는 어떻게 올바른 범위에서 파이프 작업을 수행 할 수 있습니까? – McB