在我的项目中,我有2个用户Organiser
和User
有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']
],
],
],
];
}
如何根据登录的用户定义规则???
答案 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');
}
],