Yii 2模块中的单独用户实例

时间:2015-03-08 16:21:30

标签: php yii2

我在数据库中有两个不同的用户表(编辑器和用户)。如您所知,用户表和编辑表仅在模块中使用。

我使用this way在Yii 1.1中将模块和主应用程序之间的用户实例分开。

但我在yii 2中找不到方法。我尝试扩展yii \ web \ User,我在模块中更改用户类但结果相同。如果我在模块中登录,则可以从模块外的任何地方访问相同的用户实例。

我的模块init是这样的:

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

我也这样试试;在config.php中

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

但这次我不使用授权角色(如@)

如何在模块中使用不同的用户实例?

3 个答案:

答案 0 :(得分:13)

我找到了另一种不同登录实例的方法。 Yii2使用会话ID参数进行身份验证。所以我们需要改变它。

将modules \ module_name \ module_name.php文件更改为如下所示:

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

默认情况下在yii \ web \ User中定义的idParam值:$ idParam =' __ id&#39 ;; 因此,如果我们更改此值,app和module将使用不同的用户实例。

答案 1 :(得分:1)

我没有对此进行测试,但您可能会发现类似switchIdentity()的内容,因此在您的模块中使用此功能;

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

}

答案 2 :(得分:0)

您可以为应用程序设置不同的会话名称:

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

对于模块:

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