在上篇文章给大家介绍了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), ] ); ?郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答