Php Yii2:是否可以对客人应用RBAC规则?

Php Yii2:是否可以对客人应用RBAC规则?,php,yii2,rbac,Php,Yii2,Rbac,是否可以将RBAC应用于未经身份验证的用户(Yii::$app->user->isGuest==true)?如果是,怎么做 我的规则也适用于经过身份验证的用户,将所有逻辑保存在一个地方是很好的,就像这样: 类UserAccesslevelRule扩展规则{ public$name='userAccesslevel'; 公共函数执行($userID、$item、$params){ if(Yii::$app->user->isGuest&&$someotherlogic==true){ 返回true

是否可以将RBAC应用于未经身份验证的用户(
Yii::$app->user->isGuest==true
)?如果是,怎么做

我的规则也适用于经过身份验证的用户,将所有逻辑保存在一个地方是很好的,就像这样:

类UserAccesslevelRule扩展规则{
public$name='userAccesslevel';
公共函数执行($userID、$item、$params){
if(Yii::$app->user->isGuest&&$someotherlogic==true){
返回true;
}否则{
如果($somelogic==true){
返回true;
}
}
返回false;
}
}
您可以使用ACF(访问控制过滤器),在控制器中,您可以为来宾分配允许的操作

来自Yii2指南

使用yii\web\Controller;
使用yii\filters\AccessControl;
类SiteController扩展控制器
{
公共职能行为()
{
返回[
“访问”=>[
'class'=>AccessControl::className(),
“仅限”=>[“登录”、“注销”、“注册”],
“规则”=>[
[
'allow'=>true,
“操作”=>[“登录”,“注册”],
'roles'=>['?'],//true,
“操作”=>[“注销”],
'角色'=>['@'],
],
],
],
];
}
// ...
}


使用RBAC,您还可以定义新的规则。请参见此了解新规则,但似乎您希望重新定义is guest的行为。。isGuest属性和getIsGuest()公共方法的定义可能是,为此,您应该扩展此类并重新定义isGuest函数

在控制器中,您可以执行以下操作

    use yii\filters\AccessControl;

    class controllerName extends Controller {

    public function behaviors() {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['index','Other_action_names'],
                    'rules' => [
                        [
                            'allow' => true,
                            'actions' => ['index','Other_action_names'],
                            'roles' => (Yii::$app->user->isGuest) ? ["@"] : [],   // Your roles
                        ],
                    ],
                ],
            ];
        }

   public function actionIndex() {


            $searchModel = new SearchModel();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

            return $this->render('index', [
                        'searchModel' => $searchModel,
                        'dataProvider' => $dataProvider,
            ]);

    }

    }

希望这对您有用。

您希望在控制器中为来宾用户应用规则的位置?您将如何准备系统来区分来宾?@Mohan在控制器中或在模型中的某些逻辑中。@Bizley不确定您的意思。因为来宾之间没有区别(无其他实现)每个来宾都将获得相同的权限,因此没有必要为他们准备RBAC规则。我需要为规则添加一些逻辑,这样做就行不通了。在我的问题中,规则指的是我创建的app\rbac\rule类。关于你在这里描述的方法,还有其他答案。我已经更新了答案,并对你的评论提出了一些建议,希望这是有用的。。
    use yii\filters\AccessControl;

    class controllerName extends Controller {

    public function behaviors() {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['index','Other_action_names'],
                    'rules' => [
                        [
                            'allow' => true,
                            'actions' => ['index','Other_action_names'],
                            'roles' => (Yii::$app->user->isGuest) ? ["@"] : [],   // Your roles
                        ],
                    ],
                ],
            ];
        }

   public function actionIndex() {


            $searchModel = new SearchModel();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

            return $this->render('index', [
                        'searchModel' => $searchModel,
                        'dataProvider' => $dataProvider,
            ]);

    }

    }