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

在yii2中定义多用户登录的规则,yii,yii2,yii2-advanced-app,yii2-basic-app,Yii,Yii2,Yii2 Advanced App,Yii2 Basic App,在我的项目中,我有两个用户organizer和User,有两个不同的表 我想为两个用户定义事件表的规则。例如,如果登录了Organizer,我可以看到Yii::$app->user->isGuest,如果登录了user,我可以看到Yii::$app->users->isGuest,我想为两个用户定义单独的规则 如果Organizer登录,则只有他才能查看整个部分,而不是用户;如果用户登录,则只有他才能创建用户列表 如果任何访问者点击创建活动,他们应该重定向到组织者登录,或者如果他们点击创建用户,

在我的项目中,我有两个用户
organizer
User
,有两个不同的表

我想为两个用户定义
事件
表的规则。例如,如果登录了
Organizer
,我可以看到
Yii::$app->user->isGuest
,如果登录了
user
,我可以看到
Yii::$app->users->isGuest
,我想为两个用户定义单独的规则

如果
Organizer
登录,则只有他才能查看整个部分,而不是
用户
;如果
用户
登录,则只有他才能
创建
用户列表

如果任何访问者点击
创建活动
,他们应该重定向到
组织者登录
,或者如果他们点击
创建用户
,他们应该重定向到
用户登录
。 我定义了如下规则,但它总是重定向到
组织者登录
,而不是
用户登录

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

如何定义基于哪个用户登录的规则?

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

我建议您对RBAC和AuthManager进行评估。您应该将角色分配给用户或组织者,然后根据此角色分配权限。不,不是这样。我让2个用户登录我的项目,我希望他们不要访问某些模型。这是相同的解决方案,只需为他们返回false而不是true。