2012-11-10 220 views
0

我想弄清楚如何讓我的用戶身份驗證體系結構。而不是每個用戶的正常帳戶,我正在開發一個系統,您有一個帳戶(電子郵件和密碼),它鏈接到各種較小的帳戶(具有不同的ID,顯示名稱,訪問角色......基本上是另一個表在數據庫中)。這些較小的或「子」賬戶完全相互獨立。Yii - 創建與子帳戶鏈接的「主」用戶帳戶

我目前正在使用它登錄「主」帳戶,並且在用戶菜單中有一個下拉列表,用於在各個子帳戶之間進行切換。但是,我堅持要如何實現切換帳戶並保持其持久性。

我嘗試過擴展CWebUser並添加setSub($id)方法,該方法需要切換到子帳戶的ID,並將$currentSub變量設置爲子帳戶模型,但似乎沒有工作...... I不知道從哪裏開始。

我真正需要的是子帳戶的displayNameid要堅持,以及在網站的任何頁面上更改這些值的方法。然後我可以在個性化頁面上使用該ID並從那裏開始(而不是使用設置爲Yii::app()->user->id的「主」帳戶的ID)。我想我只是不知道如何設置變量並讓它們保持不變。

回答

0

看起來像你描述的一樣正確,但沒有你的實際代碼,我不知道你可能混淆了什麼。以下是我只是驗證工作對我來說:

在你的組件文件夾,請將名爲WebUser.php用下面的代碼的新文件:

class WebUser extends CWebUser{ 

    public function getSubId(){ 
     return Yii::app()->user->getState('subId'); 
    } 

    public function setSubId($id){ 
     Yii::app()->user->setState('subId',$id); 
    } 
} 

然後在你的config/main.php文件中添加'class'=>'WebUser'行到您的用戶組件。

// application components 
'components'=>array(
    'user'=>array(
     // enable cookie-based authentication 
     'class'=>'WebUser', 
     'allowAutoLogin'=>true, 
    ), 
... 

通過上述,我驗證它爲我工作用下面的代碼:

Yii::app()->user->subId = 10; 
echo Yii::app()->user->subId; 

而且它確實回顯10到屏幕上。您可以複製WebUser中的邏輯以對子displayName屬性執行相同的操作。然後,只要你的腳本在適當的地方設置了這些值,你就全部設置好了。

更新:修復了我的代碼,爲以後的觀衆。以上應該工作,並堅持下去。之前我曾試圖在WebUser對象中定義一個變量,但顯然不能保持。相反,使用WebUser對象作爲setState/getState方法的包裝可以按照需要工作。

+0

這基本上是我所做的,但它不會持續。假設我在用戶個人資料中設置了ID,我還想訪問主頁或任何其他頁面上的變量。如果我按照你所做的方式設置它,並通過echo'Yii :: app() - > user-> subId;調用它,它會返回'Undefined property:UWebUser :: $ subId'。我需要將其設置在每個不可能的頁面上。 – Ryan

+0

找到了。 'Yii :: app() - > user-> setState('subID',##);'這會使它在頁面中持續存在。感謝您的幫助=) – Ryan

+0

嗯,是的,這實際上是比我想要做的更好的解決方案。這會將它保存在會話中,同時應該足以滿足您的需求。很高興我能幫上忙。 –