首页 > 编程 > PHP > 正文

使用Yii2 rbac权限控制菜单menu

2020-03-22 19:06:52
字体:
来源:转载
供稿:网友
这篇文章主要介绍了Yii2 rbac权限控制之菜单menu实例教程的相关资料,需要的朋友可以参考下

在上篇文章给大家介绍了yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充。

部分小伙们纷纷反映,最后菜单menu怎么控制权限呀,看不懂,搞不定,而且你那貌似没搞完,瞎忽悠!确实没那么全,今天看我们如何实现菜单完美权限化。先罗列下主要讲的内容,不需要的没必要看下去,只为分享给有需要的人。

利用menu表添加菜单

左侧菜单结果adminlte完美呈现

菜单前面自定义icon小图标并呈现

如何控制菜单的显示或者隐藏

页面操作按钮没权限的不做显示

gridview中也只显示有操作权限的按钮

嗯,差不多就这么多,如果你还有其他的有关权限控制菜单的需求,请下方留言,咱们共同切磋交流。

先看图预览下大致效果,不然怎么激起你们好学的心。

首先我们先访问路由页面 /dmin/route/index ,尽可能的把左侧的全部选中,然后移动到右侧,,然后记得给当前用户分配相关的可访问权限哦。

接下来访问菜单列表 /admin/menu/index 点击添加菜单,如果这个时候你没有权限访问了,请你在配置文件的 as access文件内暂时允许当前用户访问任意权限,并在我们添加完权限的时候去掉as access的设置,一定要记得哦,不然权限失效了可别回来找我。

这里我们先填写上图中标红的四个字段

举个例子:我们要添加一级菜单 权限管理

名称请填写 权限管理 ,因为是一级菜单,父级名称请留空,路由我们这里选择 /admin/default/index ,注意了,如果匹配到任何路由,请访问路由页面把左侧的选中移动到右侧。

映射,其实就是排序高低的问题,比如说我添加了两个菜单,映射值为1的就在上面 值为2的就在1的下面,我们这里填写数字1。

数据 这一项我们后面再说。

按照刚刚介绍的这种方式添加吧,举一个添加二级菜单 权限控制 的例子

只需要把父级名称这里填写我们刚刚添加成功的一级名称 权限管理 即可。其他照旧。不会操作的多看两遍,这里最好把权限管理的几个菜单全部添加完毕,因为接下来我们需要且你可以多练练手嘛。

到此我们已经会添加菜单了。

我们来看下一步,利用我们之前搭建的后台框架进行展现。

use mdm/admin/components/MenuHelper; echo dmstr/widgets/Menu::widget( [ options = [ html' target='_blank'>class = sidebar-menu ],  items = MenuHelper::getAssignedMenu(Yii::$app- user- id), ] );

是不是很简单,What?我的怎么没有dmstr这玩意,不好意思,已经说的很多遍,需要先看上文再有这个菜单的结合。

ok,刷新页面看看你的菜单,虽然我们还没完全实现我们想要的功能,不过到此你应该能看到你的菜单展现了。

接下来将进入我们的重点以及难点,我们要实现菜单前面的小图标且完成菜单可隐藏控制。

还记得我们一开始创建菜单的时候,唯一没进行填写的选项 数据 吗?为了后续操作方便,我们这里一并把图标和隐藏的选项都填写上。我们以开始截图中的 后台用户管理 这个二级菜单为例进行修改。截图大家先看看我们的菜单目前的状态,

请在其更新页面的“数据”项中务必填写下面的代码,如果你有新的想法,还请先按照我的思路后面再做修改,因为后面我们要进行操作。

{ icon : fa fa-user , visible : false}

是的,这个 数据 项我们填写的是一段json代码,接下来我们对展示菜单的代码也做稍微的整改,为了方便大家看代码,这里的$callback直接写在页面上了,回头大家可以继续封装优化。

use mdm/admin/components/MenuHelper;  ?php $callback = function($menu){ $data = json_decode($menu[ data ], true); $items = $menu[ children $return = [  label = $menu[ name ],  url = [$menu[ route ]], //处理我们的配置 if ($data) { //visible isset($data[ visible ]) $return[ visible ] = $data[ visible //icon isset($data[ icon ]) $data[ icon ] $return[ icon ] = $data[ icon //other attribute e.g. class... $return[ options ] = $data; //没配置图标的显示默认图标 (!isset($return[ icon ]) || !$return[ icon ]) $return[ icon ] = fa fa-circle-o $items $return[ items ] = $items; return $return; //这里我们对一开始写的菜单menu进行了优化echo dmstr/widgets/Menu::widget( [  options = [ class = sidebar-menu ],  items = MenuHelper::getAssignedMenu(Yii::$app- user- id, null, $callback), ] ); ?         

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表