[英]Use different controller for same route based on user role in Laravel
[英]Yii: Use a different scope based on user role
我有兩個級別的可以創建和更新用戶的管理員:“管理員”和“管理員”。
在我的用戶_form.php中,我有一個具有用戶級別的“ user_type”下拉列表。
我想限制經理創建“管理員”帳戶,並且顯然在用戶更新其自己的記錄時完全隱藏下拉列表。
a)有沒有一種方法可以使用rules()來控制這種行為? b)我考慮過要創建一個名為“ hideAdmin”的范圍,該范圍如下所示:
'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;
}
最后,像這樣創建我的下拉列表。
<?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-Zia-Mir中得到提示,並在我的用戶類中創建了一個新方法,該方法檢查權限並返回適當的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;
}
好的,實際上,您可以通過在View代碼中使用If語句來完成此操作。 你可以這樣
<?php
if(Yii::app()->authManager->checkAccess('Admin', Yii::app()->user->id)) {
?>
<?php $criteria=new CDbCriteria();
$criteria->condition="NOT user_type=Admin";
echo $form->dropDownList($model,'user_type_id',
CHtml::listData(UserType::model()->findAll($criteria),'id','user_type')); ?>
<?php } ?>
如果僅用戶是admin,則將顯示下拉列表。
編輯:如果要使用函數調用獲取它,則可以使用它。
public function scopeToUse() {
if(Yii::app()->authManager->checkAccess('Admin', Yii::app()->user->id)) {
$this->getDbCriteria()->mergeWith(array(
'condition' => 'NOT user_type="Admin"',
'order'=>'id ASC'
));
}
return $this;
}
那你就可以使用
<?php echo $form->dropDownList($model,'user_type_id',
CHtml::listData(UserType::model()->scopeToUse()->findAll(),'id','user_type')); ?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.