【问题标题】:How to set global access control in yii2?yii2如何设置全局访问控制?
【发布时间】:2018-11-01 00:08:32
【问题描述】:

我有AdminControllerbehavior

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['login'],
                    'allow' => true,
                    'roles' => ['*'],
                ],
                [
                    'actions' => ['index', 'logout'],
                    'allow' => true,
                    'roles' => ['admin', 'editor', 'expert'],
                ],
                [
                    'actions' => ['update', 'delete'],
                    'allow' => true,
                    'roles' => ['admin'],
                ]
            ]
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['get'],
            ],
        ],
    ]; 
}

然后我创建子控制器:

  • 默认控制器
  • inf-courses 控制器
  • 和其他

如何在父级 (AdminController) 上使用规则,然后它的工作原理? 如果我在deafult 中添加类似的规则,它会起作用,但全局不会。

附:我做管理面板并想要下一个: - 任何人都可以尝试登录 - 访问管理面板:['admin', 'editor', 'expert'] - 登出只能['admin', 'editor', 'expert']

这是所有模块 admin 与父 AdminController 的全局规则。

谢谢。

【问题讨论】:

    标签: yii2 access-control


    【解决方案1】:

    如果您扩展控制器,然后覆盖 behaviors(),那么请确保包含父级的行为,如下所示:

    return ArrayHelper::merge(parent::behaviors(), [
      // your behaviors here
    ]);
    

    【讨论】:

    • 你不懂我。看,我将* 替换为? 并且有逻辑我不能去default/*。但是,如果我有这些,我如何为所有控制器声明相同的登录:/admin/CONTROLLER/ACTION。除了/admin/default/login,我需要阻止每个控制器和每个操作的用户
    • 嗯,现在我没有工作规则......看看我上面的答案(大帖子)和这些用户规则。我做你写的结构和我的行为:'access' => [ 'rules' => [ [ 'actions' => ['update'], 'allow' => true, 'roles' => ['admin'], ], [ 'actions' => ['view', 'index'], 'allow' => true, 'roles' => ['editor', 'expert'], ], ] ],。如果我 editor 我现在可以编辑(但不应该)
    【解决方案2】:

    完成! 我让我的 AdminController 像:

    class AdminController extends Controller {
    
        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'rules' => [
                        [
                            'allow' => true,
                            'roles' => ['admin', 'editor', 'expert'],
                        ],
                        [
                            'actions' => ['login'],
                            'allow' => true,
                            'roles' => ['?'],
                        ],
                        [
                            'actions' => ['delete'],
                            'allow' => true,
                            'roles' => ['admin'],
                        ]
                    ]
                ],
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'logout' => ['get'],
                    ],
                ],
            ]; 
        }
    }
    

    并为管理员中的每个控制器扩展它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 2014-10-29
      • 2016-08-11
      • 2012-07-21
      • 2020-08-27
      • 2023-04-07
      相关资源
      最近更新 更多