在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。