Yii2-rbac权限基础--菜单menu管理

menu表是根据权限来控制后台菜单的显示和隐藏的。

先来看看表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- ---------------------------- 
-- Table structure for yc_menu 
-- ---------------------------- 
DROP TABLE IF EXISTS `yc_menu`; 
CREATE TABLE `yc_menu` ( 
   `id` int (11) NOT NULL AUTO_INCREMENT, 
   ` name ` varchar (128) NOT NULL
   `parent` int (11) DEFAULT NULL
   `route` varchar (256) DEFAULT NULL
   ` order ` int (11) DEFAULT NULL
   `data` text, 
   PRIMARY KEY (`id`), 
   KEY `parent` (`parent`), 
   KEY ` name ` (` name `), 
   KEY `route` (`route`(255)), 
   KEY ` order ` (` order `), 
   CONSTRAINT `dh_menu_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `dh_menu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT= '系统管理员菜单权限表' ;

这里详细介绍几个主要的字段:

name 是菜单的名称;

parent 是父类菜单的名称,留空则表示顶级菜单;

route 指的是菜单的URL;

在数据库里的表现:


在页面上的表现:

使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
< ul id="main-menu" class="main-menu">
     < li class="<?php if (Yii::$app->controller->id == 'site'){echo 'active';}?>">
         < a href="/site/index">
           < i class="linecons-cloud"></ i >
         < span class="title">HOME</ span >
         </ a >
     </ li >
     <? php $i=0;foreach (MenuHelper::getAssignedMenu(\Yii::$app->user->id) as $k=>$p_menu) {
           if(!empty($p_menu['items'])){
                 $if_menu=0;
                 $url=parse_url($_SERVER["REQUEST_URI"]);
                 $url_arr =  array_filter(explode("/", $url['path']));
                 $url_items=$item_arr=[];
                 //根据URL判断显示
                 foreach($p_menu['items'] as $val){
                     if($val['url'][0]){
                         $item_arr = array_filter(explode("/", $val['url'][0]));
                     }
                     $url_items[]=$item_arr[1];
                 }
                 if(isset($url_arr[1]) && in_array($url_arr[1], $url_items)){
                     $if_menu=1;
                 }
   ?>
   < li <?php echo $if_menu==1?'class="active"':''; ?>>
       < a href="<?php echo $p_menu['url']; ?>">
            < i class="<?php echo $linecons[$i];$i++; ?>"></ i >
            < span class="title"><?=$p_menu['label']?></ span >
       </ a >
   <? php if(!empty($p_menu['items'])){ ?>
       < ul <?php echo $if_menu==1?'style="display: block;"':''; ?>>
           <? php foreach ($p_menu['items'] as $c_menu) {?>
           < li >
             < a href="<?= $c_menu['url'][0] ?>">
             < span class="title"><?= $c_menu['label'] ?></ span >
             </ a >
          </ li >
    <? php } ?>
       </ ul >
    <? php } ?>
    </ li >
    <? php }else{ ?>
          < li >
              < a href="<?= $p_menu['url'][0] ?>">< i class="icon-bar-chart"></ i ><?=$p_menu['label']?></ a >
          </ li >
    <? php }} ?>< br ></ ul >

  这里使用到啦yii2-admin下的MenuHelper类getAssignedMenu方法,该方法用于获取用户对应的菜单信息.

  在config\params.php下配置

1
2
3
4
5
6
7
8
9
return [
     'adminEmail' => 'admin@example.com' ,
     'mdm.admin.configs' => [
         'db' => 'db' ,
         'menuTable' => '{{%yc_menu}}' ,
         'cache' => null,
         'cacheDuration' => 3600
     ],
];

  最终显示结果:


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值