2011-02-16 36 views
3

我已經開始使用Yii框架,並且我有一個關於UserIdentity組件使用的新問題。Yii - 具有自己的UserIdentity組件的模塊

我的應用程序有一個管理模塊,內容顯示到真正的網站將作爲一個後臺。該模塊有自己的管理表tbl_admin_user

我想要的模塊,從一般的網站的一個分開的登錄方法(檢查對這個表,而不是tbl_user)。爲此,我假設我需要實現UserIdentity的身份驗證方法,但僅適用於該模塊,而不是完整的應用程序,請糾正我的錯誤。

當我重寫方法,我什麼也沒得到。管理模塊使用的UserIdentity位於* 保護\組件*,而不是自己的。

有什麼建議嗎?

回答

6

您不能導入模塊識別類。 爲此,只需修改您的初始化函數在你的模塊類延伸CWebModule如下:

public function init() 
{ 
    $this->setImport(array(
     '#moduleName#.models.*', 
     '#moduleName#.components.*', 
    )); 
} 

因此,所有的模塊部件(和模型也)將被輸入,即,您的模塊識別的類。

小心:這樣做,你有兩個同名的輸入類UserIdentity。 如果您的應用程序配置合理,則模塊中的模塊必須優先處理,因爲其目錄在include_path中的位置。 但是你應該給你的班級另設一個名字,在你的模塊中擴展CUserIdentityAdminUserIdentity。然後在您的登錄操作中,您使用新的AdminUserIdentity($ username,$ password)而不是新的UserIdentity($ username,$ password)。這會讓你的代碼更清晰。

在Yii2
+0

謝謝,非常有用) – 2011-02-17 09:43:18

0

我設法改寫User類加入這個到管理模塊默認CONTROLER:

public function init() { 
    // this overrides the User Identity class 
    // and uses the one provided by the admin module 
    \Yii::$app->set("user", [ 
     'class' => 'yii\web\User', 
     'identityClass' => 'app\modules\admin\models\User', 
     'enableAutoLogin' => true, 
    ]); 
} 
0

在GiiModule我們使用:

/** 
* Initializes the gii module. 
*/ 
public function init() 
{ 
    parent::init(); 
    Yii::setPathOfAlias('gii',dirname(__FILE__)); 
    Yii::app()->setComponents(array(
     'errorHandler'=>array(
      'class'=>'CErrorHandler', 
      'errorAction'=>$this->getId().'/default/error', 
     ), 
     'user'=>array(
      'class'=>'CWebUser', 
      'stateKeyPrefix'=>'gii', 
      'loginUrl'=>Yii::app()->createUrl($this->getId().'/default/login'), 
     ), 
     'widgetFactory' => array(
      'class'=>'CWidgetFactory', 
      'widgets' => array() 
     ) 
    ), false); 
    $this->generatorPaths[]='gii.generators'; 
    $this->controllerMap=$this->findGenerators(); 
} 

所以,如果你想更改登錄系統,爲該模塊創建另一個用戶,並將用戶功能與應用程序用戶功能分離。