在yii2中定义多用户登录的规则

时间:2015-11-12 00:32:02

标签: yii yii2 yii2-advanced-app yii2-basic-app

在我的项目中,我有2个用户OrganiserUser有2个不同的表格。

我想为两个用户定义Event表的规则。例如,如果记录Organiser,我可以看到Yii::$app->user->isGuest,如果记录User,我可以看到Yii::$app->users->isGuest,我想为两者定义单独的规则用户。

如果Organiser已登录,则只有他可以查看整个部分,而不是user并且如果user已登录,那么他只能create用户列表

如果有任何访问者点击Create an Event,他们应该重定向到Organiser Login,或者如果他们点击Create user,他们应该重定向到User Login。 我已经定义了如下规则但是它总是重定向到Organiser Login而不是user login

public function behaviors()
{

    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['index', 'view','create','update','delete'],
            'rules' => [
                [
                    'actions' => ['index','view'],
                    'allow' => true,
                    'roles' => ['?'],
                ],
                [
                    'actions' => ['create','update','delete'],
                    'allow' => true,
                    'roles' => ['@'],
                ],
                [
                    'allow' => false,
                    'verbs' => ['POST']
                ],
            ],
        ],
    ];
}

如何根据登录的用户定义规则???

1 个答案:

答案 0 :(得分:1)

我同意scaisEdge使用rbac是一个更好的解决方案,但如果你真的想根据用户名定义一个规则,那么它是可能的。如果您希望用户名为“testuser”的用户是唯一访问控制器“testPage”操作的用户,则可以在rules数组中添加以下内容:

[
    'actions' => ['test-page'],
    'allow' => true,
    'matchCallback' => function ($rule, $action)
    {
        if (Yii::$app->user->isGuest)
            return false;

        return (Yii::$app->user->identity->username == 'testuser');
    }
],