2015-03-08 14 views
8

Ich habe zwei verschiedene Benutzertabellen (Editoren und Benutzer) in der Datenbank. User-Tabelle, wie Sie wissen und die Editor-Tabelle verwendet nur in Modul.Yii 2 Separate Benutzerinstanz in Modul

Ich verwende this way, um Benutzerinstanzen zwischen Modul und Hauptanwendung in Yii 1.1 zu trennen.

Aber ich kann keinen Weg in yii 2. Ich versuche zu erweitern yii \ web \ Benutzer und ich ändern Benutzerklasse im Modul aber die gleichen Ergebnisse. Wenn ich mich im Modul anmelde, kann auf dieselbe Benutzerinstanz von außerhalb des Moduls und von überall zugegriffen werden.

Mein Modul init wie folgt aus:

public function init() 
{ 
    parent::init(); 

    \Yii::$app->set('user', [ 
     'class' => 'app\modules\yonetim\components\yonetimUser', 
     'identityClass' => 'app\models\Editor', 
     'enableAutoLogin' => true, 
     'loginUrl' => ['yonetim/default/login'], 
    ]); 
} 

Ich versuche auch, auf diese Weise; in config.php

'components' => [ 
    'user' => [ 
     'identityClass' => 'app\models\User', 
     'enableAutoLogin' => true, 
    ], 
    'editor' => [ 
     'class' => 'yii\web\User', 
     'identityClass' => 'app\models\Editor', 
     'enableAutoLogin' => true, 
    ], 
], 

Aber diesmal habe ich (wie @) nicht Berechtigungsrollen verwenden

Wie kann ich verschiedene User-Instanz in meinem Modul verwenden?

Antwort

11

Ich fand einen anderen Weg für andere Login-Instanz. Yii2 verwendet Session-ID-Parameter zur Authentifizierung. Also müssen wir es ändern.

Ändern Sie Ihre Module \ module_name \ module_name.php Datei wie folgt aussieht:

public function init() 
{ 
    parent::init(); 

    Yii::$app->set('user', [ 
     'class' => 'yii\web\User', 
     'identityClass' => 'app\models\Editor', 
     'enableAutoLogin' => false, 
     'loginUrl' => ['yonetim/default/login'], 
     'identityCookie' => ['name' => 'editor', 'httpOnly' => true], 
     'idParam' => 'editor_id', //this is important ! 
    ]); 
} 

in yii \ web \ Benutzer als Standard definiert idParam Wert: $ idParam = '__id'; Wenn wir diesen Wert also ändern, verwenden App und Modul verschiedene Benutzerinstanzen.

+1

Vielen Dank! Du hast mich vor mehreren Stunden Schmerzen bewahrt – Yerke

1

Ich habe das nicht getestet, aber Sie finden vielleicht etwas wie switchIdentity() funktioniert, so in Ihrem Modul verwenden Sie dies;

public function init() 
{ 
    parent::init(); 
    $editor = new app\models\Editor 
    $user = Yii::$app->user; 
    $user->switchIdentity($editor); 

} 
+0

Wenn ich switchIdentity() Funktion zu verwenden, Yü automatisch eingeloggt funktioniert wie Erstellen eines neuen Editorinstanz aber gleiche Benutzeroberfläche. In yii docs heißt es: "Diese Methode wird hauptsächlich von login(), logout() und loginByCookie() aufgerufen, wenn der aktuelle Benutzer den entsprechenden Identitätsinformationen zugeordnet werden muss." –

0

Sie können für Ihre Anwendung verschiedene Session-Namen festgelegt:

'components' => [ 
    'session' => [ 
     'name' => 'application-session-name', 
    ], 
], 

Und für das Modul.

'components' => [ 
    'session' => [ 
     'name' => 'module-session-name', 
    ], 
],