齐天大圣

齐天大圣

全栈工程师。

  • 财富值550
  • 威望值0
  • 总积分730

个人信息

  • 有这样一个问题想请教一下,现在的rbac权限控制是基于路由的,比如我创建了一个权限然后添加一个或者多个路由。如果说我想创建一个不对应路由的权限呢?比如说我现在有一个统计页面,统计的信息有订单统计、利润统计、客户统计。而这三个数据都是有统计接口返回的,admin和user角色都可以请求这个接口,但是user只显示订单统计,admin显示所有的统计,我想把这个三个统计定义成三个权限,然后admin和user分配不同的权限,这样我在统计接口中判断当前用户是否拥有某个权限,然后查询不同的数据并返回。我这种场景怎么实现好呢?

  • 收藏了教程
    yii2-admin 插件使用简要教程
  • 2018-03-25 已签到
    连续签到1天,获得了5个金钱
  • 已解决。

    之前我是在main中配置了AccessControl,然后在BaseController中设置了authenticator,执行的顺序为先AccessControl再authentication,这样就导致在AccessControl中所有的动作都是出于未登陆状态返回401。正确的执行顺讯应该显示authentication然后再AccessControl。最后根据@6把刀的提示,我在基类控制器BaseController中修改如下

     $behaviors['authenticator'] = [
                    'class' => HttpBearerAuth::className(),
                    'optional' => [
                        'login',
                        'signup',
                        'logout'
                    ],
                ];
    
     $behaviors['access'] = [
        'class' => 'rbac\components\AccessControl',
             'allowActions' => [
                 'login',
        ]
     ];
    

    不再在main中的component中配置AccessControl。这样执行的顺序就是先authentication然后再AccessControl了。
    现在的疑问是,main配置中的会最先执行吗,因为对yii2的源码也不太了解,不知道执行顺序是怎么样的。我这样是解决问题了,是否有更优雅的方式呢?

  • 回复了 的回答

    打印head头里面有木有数据

    你说的是对的,我把对AccessControl的配置从main中拿到了controller中配置并在authenticator之后添加,执行顺序就正确了。

  • 赞了回答

    如果你是APACHE服务器的话可以尝试在conf文件见里面配置header 试一下

    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS,DELETE"
    Header always set Access-Control-Allow-Credentials "true"
    Header always set Access-Control-Allow-Headers "Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With"
    

    然后在我API认证的时候去除了对OPTIONS的请求的验证

     if (Yii::$app->getRequest()->getMethod() !== 'OPTIONS') {
         ....
     }
    

    你可以尝试这样配置下。另外就是我还做了一下将OPTIONS的请求都返回了200,让前端省去判断这个请求的返回结果。
    是在.htacess里面写的rewrite:

    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
    

    如果有需要你可以试试

  • 为你的坚持而点赞

  • 发表了说说
    前后端分离,权限控制,好烦啊?!
  • 2018-03-19 已签到
    连续签到1天,获得了5个金钱
主管 等级规则
730/1000
资料完整度
50/100
用户活跃度
10/100

Ta的关注

9

Ta的粉丝

6

Ta的访客

31