2015-03-08 8 views
8

Mam dwie różne tabele użytkowników (redaktorzy i użytkownicy) w bazie danych. Tabela użytkownika, którą znasz, a tabela Edytora jest właśnie używana w module.Yii 2 Oddzielne wystąpienie użytkownika w module

Używam do oddzielania instancji użytkowników pomiędzy modułem a aplikacją główną w Yii 1.1.

Ale nie mogę znaleźć sposobu w Yii 2. Próbuję rozszerzyć yii \ web \ User i zmieniam klasę użytkownika w module, ale te same wyniki. Jeśli zaloguję się w module, ta sama instancja użytkownika jest dostępna z modułu i z dowolnego miejsca.

Mój moduł startowych tak:

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'], 
    ]); 
} 

Również próbuję w ten sposób; w config.php

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

Ale tym razem nie używam role autoryzacji (jak @)

Jak mogę użyć innego użytkownika instancji w moim modułu?

Odpowiedz

11

Znalazłem inny sposób dla różnych instancji logowania. Yii2 używa identyfikatora sesji dla uwierzytelnienia. Musimy to zmienić.

Zmiana modułów \ module_name \ module_name.php plik wygląda tak:

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 ! 
    ]); 
} 

wartość idParam zdefiniowany w Yii \ Web \ użytkownik domyślnie: $ idParam = '__id'; Jeśli więc zmienimy tę wartość, aplikacja i moduł korzystają z różnych instancji użytkowników.

+1

Dziękuję bardzo! Uratowałeś mnie od kilku godzin bólu – Yerke

1

Nie testowałem tego, ale możesz znaleźć coś takiego jak switchIdentity() działa, więc w swoim module użyj tego;

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

} 
+0

Kiedy używać funkcji switchIdentity(), Yii działa jak automatycznie rejestrowane w Utwórz nowy Wydawca edytora, ale ten sam interfejs użytkownika. W dokumentach yii mówi: "Ta metoda jest wywoływana głównie przez login(), logout() i loginByCookie(), kiedy bieżący użytkownik musi być powiązany z odpowiednią informacją o tożsamości." –

0

Można ustawić różne nazwy sesji dla aplikacji:

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

A dla modułu.

'components' => [ 
    'session' => [ 
     'name' => 'module-session-name', 
    ], 
], 
Powiązane problemy