2015-03-08 16 views
8

Ho due diverse tabelle utente (editor e utenti) nel database. La tabella utente è nota e la tabella dell'Editor viene semplicemente utilizzata nel modulo.Yii 2 Istanza utente separata nel modulo

Io uso this way per separare le istanze utente tra il modulo e l'applicazione principale in Yii 1.1.

Ma non riesco a trovare un modo in yii 2. Cerco di estendere yii \ web \ Utente e cambio classe utente nel modulo ma gli stessi risultati. Se accedo al modulo, la stessa istanza utente è accessibile dal modulo e ovunque.

mio modulo di init in questo modo:

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

Anche io provare in questo modo; in config.php

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

Ma questa volta io non uso i ruoli di autorizzazione (come @)

Come posso usare diverso esempio d'uso nel mio modulo?

risposta

11

Ho trovato un altro modo per un'istanza di accesso diversa. Yii2 utilizza il parametro id di sessione per l'autenticazione. Quindi dobbiamo cambiarlo.

Cambia la tua moduli \ module_name module_name.php file \ a assomiglia a questo:

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

valore idParam definito Yii \ web \ User di default: $ idParam = '__id'; Quindi, se cambiamo questo valore, l'app e il modulo utilizzano istanze utente diverse.

+1

Grazie mille! Mi hai salvato da parecchie ore di dolore – Yerke

1

Non ho provato questo, ma è possibile trovare qualcosa come switchIdentity() funziona, quindi nel modulo utilizzare questo;

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

} 
+0

Quando uso la funzione switchIdentity(), Yii funziona come login automatico in Creare un nuovo Istanza di editor ma stessa interfaccia utente. In yii, i documenti dicono: "Questo metodo è principalmente chiamato da login(), logout() e loginByCookie() quando l'utente corrente deve essere associato alle informazioni di identità corrispondenti." –

0

È possibile impostare diversi nomi di sessione per la vostra applicazione:

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

E per il modulo:.

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