• yii2 rbac权限控制之菜单menu详细教程


    作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    前面我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了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 mdmadmincomponentsMenuHelper; 
    echo dmstrwidgetsMenu::widget( [
         'options' => ['class' => 'sidebar-menu'], 
        'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id), 
    ] );

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

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

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

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

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

    {"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), 
    ] ); ?>

     继续阅读

  • 相关阅读:
    洛谷——P1951 收费站_NOI导刊2009提高(2)
    洛谷——P1475 控制公司 Controlling Companies
    洛谷——P1176 路径计数2
    洛谷——P1156 垃圾陷阱
    洛谷——P2734 游戏 A Game
    洛谷——P1767 家族_NOI导刊2010普及(10)
    洛谷——P1413 坚果保龄球
    Kali-linux破解LM Hashes密码
    Kali-linux分析密码
    Kali-linux密码在线破解
  • 原文地址:https://www.cnblogs.com/wwolf/p/5441396.html
Copyright © 2020-2023  润新知