-1

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

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

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

4

1 回答 1

1

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

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

        return (Yii::$app->user->identity->username == 'testuser');
    }
],
于 2015-11-12T19:50:58.913 回答