【问题标题】:define access role to all user (user,guest,admin,..) in yii2在 yii2 中定义所有用户 (user,guest,admin,..) 的访问角色
【发布时间】:2020-02-11 00:17:23
【问题描述】:

我使用 rbac (dektrium) 和 ACF 来检查访问我的项目 (yii2) 中的用户。我创建了一些角色,例如:admin、manager、suser、user、.. 我有一些所有用户都可以使用的操作,例如查看操作。如何在行为方法中定义所有用户都可以使用视图操作? 为此,我们在 yii1 中为用户“*”分配了操作。

...
    array('allow',  // allow all users to perform 'index' and 'view' actions
                    'actions'=>array('view'),
                    'users'=>array('*'),
                ),
...

在yii2中使用这个代码()

...
 [
                    'allow' => true,
                    'actions' => ['view'],
                    'roles' => ['?'],
                ],
...

但是当管理员用户或管理员用户想要访问 myController/view 时显示被禁止。只有guest可以访问myController/view,如何定义一个角色或者默认访问所有用户的权限?

【问题讨论】:

    标签: yii2 roles rbac


    【解决方案1】:

    如果您想允许所有人访问操作,则无需为该操作应用访问过滤器。为避免对特定操作应用访问过滤器,您可以使用yii\filters\AccessControl$except 属性。比如这样:

    public function behaviors()
    {
        return [
            'access' => [
                 'class' => AccessControl::className(),
                 'except' => ['view'],
                 'rules' => [
                    //rules for other actions ...
                 ]
             ],
             //other behaviors ...
        ];
    }
    

    其他选项是使用角色?(客人)和@(所有登录用户)的组合,如下所示:

    [
        'allow' => true,
        'actions' => ['view'],
        'roles' => ['?', '@'],
    ]
    

    yii\filters\AccessControl 中还有 $only 属性,它允许仅将过滤器应用于显式命名的操作。但出于安全原因,最好使用$except

    资源:

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 1970-01-01
      • 2020-12-30
      • 2022-07-25
      • 2023-04-04
      • 1970-01-01
      • 2015-08-24
      • 2021-12-25
      • 2015-08-19
      相关资源
      最近更新 更多