2013-12-11 20 views
0

我是Yii Framework的初學者,我遇到了一個我無法修復的問題。我有我的班級管理員:Yii框架:根據用戶角色的不同視圖(在actionIndex上)

public function actionIndex() 
{ 
    $dataProvider=new CActiveDataProvider('Absence'); 
    $this->render('index',array(
    'dataProvider'=>$dataProvider, 
)); 
} 

這給了我一個'缺席'的清單。

在我的情況下,'erty'登錄並看到每個缺席的列表。但是,由於他的角色存儲在我的用戶表中,我希望他只能看到他的'Collaborate'別名缺席列表。 有人可以幫我嗎?

+0

你如何管理你的應用程序中的角色?它們如何附加到用戶/會話? –

+0

你好,我有一個列'角色'在我的表和WebUser類。由此,我可以使用Yii :: app() - > user-> getState('roles')來了解和比較登錄用戶的角色。 –

回答

0

只需創建

$criteria=new CDbCriteria; 
$criteria->compare('role', $user->role /* replace this with required role*/, true); 

,並將其附加到DataProvider的

$dataProvider = new CActiveDataProvider('Absence', array('criteria'=>$criteria)); 
+0

好的,謝謝emte,我比較'別名'而不是'角色'在我的標準,它的工作原理!根據他的角色,現在我將試着通過IF聲明來了解用戶是否可以看到每個人。再次感謝你。 –

0

更妙的是,當它是一個商業規則,它應該在沒有數據模型去。

所以,你可以在你沒有數據模型添加一個範圍:

'mine'=>array(
    'order'=>'a_sort_column DESC', 
    'condition'=>'role=:role', 
    'params'=>array(
     'owner'=>Yii::app()->user->getState('roles'), 
       ), 
     ), 

,然後在你的代碼中使用

 $dataProvider=new CActiveDataProvider(Absence::model()->mine()) 

如果其有關你總是可以使用默認的範圍,如果這個過濾器始終應用。

如果始終應用於除管理員背景下,這個過濾器,考慮使用擴展的缺失模型,並應用於其他類的默認範圍,想

class myAbsence extends Absence 
    { 
     public function defaultScope() { 

      return array(
    'order'=>'a_sort_column DESC', 
    'condition'=>'role=:role', 
    'params'=>array(
     'owner'=>Yii::app()->user->getState('roles'), 
       ), 
     ); 
    } 

,然後在非管理員控制器你可以使用

 $dataProvider=new CActiveDataProvider('myAbsence') 
+0

emte的解決方案有效,我將其用於我的所有項目(9個表格/控制器/模型...)。我必須測試角色以瞭解登錄用戶可以看到什麼,並且我還要知道缺席是否與他有關,但這不一定是此用戶造成這種缺席。我不知道我的英語是否清晰,請不要猶豫,要求我重新制定。我不知道範圍,你能再解釋一下嗎? –

+0

命名作用域是一種在模型中定義過濾器的方法。數據模型是您應該嘗試和放置所有業務邏輯的地方,因此是一個更好的地方來保存這種功能。如果你想在不同的地方使用它也更容易。 – ChrisB

+0

好的,謝謝你,如果我有時間的話我會用Scope重建這個,所以最好在我的情況下使用它。目前,它正在處理emte的解決方案,但我認爲它並不真正尊重MVC架構的權利? –

相關問題