齐天大圣
- 齐天大圣 评论了教程 yii2-admin 插件使用简要教程
@koko 有这样一个问题想请教一下,现在的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的源码也不太了解,不知道执行顺序是怎么样的。我这样是解决问题了,是否有更优雅的方式呢?- 齐天大圣 赞了回答
如果你是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个金钱