2017-04-19 16:24:20 3116次浏览 3条回答 1 悬赏 10 金钱

我在给REST api 配置 RBAC 权限时发现 使用ACF 会优先执行全局配置的ACF可时用户信息还未认证

RBAC 是 ACF 在配置文件中配置的 as access
认证是 Controller 中的 behaviors中配置的 authenticator

这样做会在 authenticator 还未生效时就执行的是 accessRBAC认证
我尝试将Access 写在Controllerbehaviors 中但是这样就必须每个 Controller都要加 behaviors
但是第三方的插件扩展是不能每个都去加的 请问这有什么解决方案么?

以下是部分代码

配置文件中设置

···//
    'as access' => [
        'class' => 'mdm\admin\components\AccessControl',
        'allowActions' => [
            //这里是允许访问的action
            //controller/action
            'user/login',
            'user/signup',
            //'*'
        ]
    ],
//...

Controller 中代码

...//
   public function behaviors() {

        return ArrayHelper::merge ([
            'contentNegotiator' => [
                'class' => ContentNegotiator::className(),
                'formats' => [
                    'application/json' => Response::FORMAT_JSON,
                ],
            ],
            'authenticator' => [
                'class' => CompositeAuth::className(),
                'authMethods' => [
                    HttpBasicAuth::className(),
                    HttpBearerAuth::className(),
                    [
                        'class' => QueryParamAuth::className(),
                        'tokenParam' => 'token',
                    ],
                ],
                'optional' => $this->authOptional(),
            ],
        ]
        ],parent::behaviors());
//...
  • 回答于 2017-04-19 16:31 举报

    beforeAcition

    1 条回复
    回复于 2017-04-19 17:14 回复

    beforeAction 也是一样的

  • 回答于 2017-04-19 20:07 举报

    由于Module的behaviors比controller的behaviors方法先执行,所以,authenticator的验证可以写在Module的behaviors里面

  • 回答于 2017-09-30 10:38 举报

    我也遇到同样的问题,没有办法父类没有AccessControl

    1 条回复
    回复于 2017-10-13 18:49 回复

    我是用了一个父类 Controller 在 behaviors 中处理的

您需要登录后才可以回答。登录 | 立即注册
DicksonLee
主管

DicksonLee

注册时间:2016-02-19
最后登录:2020-02-21
在线时长:20小时53分
  • 粉丝2
  • 金钱480
  • 威望0
  • 积分680

热门问题