
首先我们先访问路由页面 /dmin/route/index ,尽可能的把左侧的全部选中,然后移动到右侧,,然后记得给当前用户分配相关的可访问权限哦。
接下来访问菜单列表 /admin/menu/index 点击添加菜单,如果这个时候你没有权限访问了,请你在配置文件的 as access文件内暂时允许当前用户访问任意权限,并在我们添加完权限的时候去掉as access的设置,一定要记得哦,不然权限失效了可别回来找我。

这里我们先填写上图中标红的四个字段
举个例子:我们要添加一级菜单"权限管理"
名称请填写"权限管理",因为是一级菜单,父级名称请留空,路由我们这里选择"/admin/default/index",注意了,如果匹配到任何路由,请访问路由页面把左侧的选中移动到右侧。
映射,其实就是排序高低的问题,比如说我添加了两个菜单,映射值为1的就在上面 值为2的就在1的下面,我们这里填写数字1。
"数据"这一项我们后面再说。
按照刚刚介绍的这种方式添加吧,举一个添加二级菜单"权限控制"的例子
只需要把父级名称这里填写我们刚刚添加成功的一级名称"权限管理"即可。其他照旧。不会操作的多看两遍,这里最好把权限管理的几个菜单全部添加完毕,因为接下来我们需要且你可以多练练手嘛。
到此我们已经会添加菜单了。
我们来看下一步,利用我们之前搭建的后台框架进行展现。
use mdmadmincomponentsMenuHelper; echo dmstrwidgetsMenu::widget( ["options" => ["class" => "sidebar-menu"], "items" => MenuHelper::getAssignedMenu(Yii::$app->user->id), ] );是不是很简单,What?我的怎么没有dmstr这玩意,不好意思,已经说的很多遍,需要先看上文再有这个菜单的结合。

请在其更新页面的“数据”项中务必填写下面的代码,如果你有新的想法,还请先按照我的思路后面再做修改,因为后面我们要进行操作。
{"icon": "fa fa-user", "visible": false}是的,这个"数据"项我们填写的是一段json代码,接下来我们对展示菜单的代码也做稍微的整改,为了方便大家看代码,这里的$callback直接写在页面上了,回头大家可以继续封装优化。use mdmadmincomponentsMenuHelper; <?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 dmstrwidgetsMenu::widget( [ "options" => ["class" => "sidebar-menu"], "items" => MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback), ] ); ?>是的,你没有看错,代码是有点长,我们来简单分析分析。其实我们这里的$callback方法也只是针对上面我们添加菜单的"数据"项进行的分析。不难看出,我们对icon和visible分别进行了判断,并追加到当前menu中。
然后我们打开test/index.php文件,对标记的两个地方进行如下修改
use mdmadmincomponentsHelper; <?php //没有创建权限不显示按钮 if(Helper::checkRoute("create")) { echo Html::a("Create Test", ["create"], ["class" => "btn btn-success"]); } ?> <?= GridView::widget([ // ...... "columns" => [ // ...... [ "class" => "yiigridActionColumn", "template" => Helper::filterActionColumn("{view}{update}{delete}"), ], ], ]); ?>现在我们刷新下页面/test再看看,好像没什么变化嘛。别急,我们现在撤销当前用户的/test/create 权限和/test/update权限,然后你在刷新下页面看看效果,我们截图看看。
也就是说我们没有权限的按钮消失了,当你手动访问/test/create的时候你会发现也会提醒你没有权限。
如果你的gii模板是自定义的,相信你会迅速在其生成的模板中所有的操作上添加权限控制的,是不是很happy
最后,我们的菜单menu关于权限控制的讲解基本也就结束了,长篇大论,仔细回想起来也没多少东西,倒是希望能帮到你一二