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

来源:互联网 发布:类似慕课网的软件 编辑:程序博客网 时间:2024/05/21 18:30

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) NOTNULL AUTO_INCREMENT, 
  `name`varchar(128) NOT NULL
  `parent`int(11) DEFAULTNULL
  `route`varchar(256) DEFAULT NULL
  `order`int(11) DEFAULTNULL
  `data` text, 
  PRIMARYKEY (`id`), 
  KEY`parent` (`parent`), 
  KEY`name` (`name`), 
  KEY`route` (`route`(255)), 
  KEY`order` (`order`), 
  CONSTRAINT`dh_menu_ibfk_1` FOREIGNKEY (`parent`) REFERENCES`dh_menu` (`id`) ONDELETE SET NULL ON UPDATECASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT 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
<ulid="main-menu" class="main-menu">
    <liclass="<?php if (Yii::$app->controller->id == 'site'){echo 'active';}?>">
        <ahref="/site/index">
          <iclass="linecons-cloud"></i>
        <spanclass="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"':''; ?>>
      <ahref="<?php echo $p_menu['url']; ?>">
           <iclass="<?php echo $linecons[$i];$i++; ?>"></i>
           <spanclass="title"><?=$p_menu['label']?></span>
      </a>
  <?phpif(!empty($p_menu['items'])){ ?>
      <ul<?php echo $if_menu==1?'style="display: block;"':''; ?>>
          <?phpforeach ($p_menu['items'] as $c_menu) {?>
          <li>
            <ahref="<?= $c_menu['url'][0] ?>">
            <spanclass="title"><?= $c_menu['label'] ?></span>
            </a>
         </li>
   <?php} ?>
      </ul>
   <?php} ?>
   </li>
   <?php}else{ ?>
         <li>
             <ahref="<?= $p_menu['url'][0] ?>"><iclass="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
    ],
];

  最终显示结果:


 

 

0 0
原创粉丝点击