权限管理设计(菜单栏)Javaweb

说明一下 源码只包含了实体类 dao层  service 和实现类 还有就是最后查询权限列表的方法

1:设计的数据库列表

 a: 角色表or分组表(groups),我一般叫为分组   这个组有哪些权限自我的理解比较好一点

CREATE TABLE `groups` (
  `groupId` int(11) NOT NULL AUTO_INCREMENT, '分组ID'
  `groupName` varchar(255) DEFAULT NULL,  '分组名称'
  `addTime` datetime DEFAULT NULL, '添加时间'
  PRIMARY KEY (`groupId`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='分组';

b:角色表or分组表中间表(groupModule),关联的是权限列表的数据记录ID

CREATE TABLE `groupModule` (
  `groupId` int(11) DEFAULT NULL, '分组ID'
  `moduleId` int(11) DEFAULT NULL  '权限ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

c:权限表数据记录(module) 每增加一个权限  需要在表手动添加 或者后台做一个添加权限的功能页面

CREATE TABLE `module` (
  `moduleId` int(11) NOT NULL AUTO_INCREMENT, '权限ID'
  `moduleCode` varchar(40) DEFAULT NULL,
  `parModuleCode` varchar(40) DEFAULT NULL,
  `moduleName` varchar(100) DEFAULT NULL COMMENT '权限名称',
  `level` int(11) DEFAULT NULL COMMENT '权限等级  1--一级    2--二级   3--三级 .....',
  `url` varchar(100) DEFAULT NULL COMMENT '权限对应地址url',
  `sequence` int(11) DEFAULT NULL COMMENT '权限排序',
  `remark` varchar(400) DEFAULT NULL,
  `icon` varchar(255) DEFAULT NULL COMMENT '权限对应图标',
  PRIMARY KEY (`moduleId`)
) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8;

d:在你登录的用户表中 添加一个字段 groupId 分组ID 就可以知道 当前登录用户有哪些权限啦2:代码实现查询权限列表 

a:需增加一个实体类来接收所以的权限列表 ModuleVo  (为了不破坏原表的结构) 菜单可以无限延伸多级菜单

package com.XinjueManager.meta.vo; 

import java.util.List;

import com.XinjueManager.meta.Module;

/** 
 * @author tqf
 * @version 创建时间:2019-8-9 上午9:44:29 
 * 类说明:
 */
public class ModuleVo extends Module{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2224819239116246876L;
	
	private List<ModuleVo> two_list;   //二级菜单
	private List<ModuleVo> three_list; //三级菜单
	
	/**
	 * @return the two_list
	 */
	public List<ModuleVo> getTwo_list() {
		return two_list;
	}
	/**
	 * @param two_list the two_list to set
	 */
	public void setTwo_list(List<ModuleVo> two_list) {
		this.two_list = two_list;
	}
	/**
	 * @return the three_list
	 */
	public List<ModuleVo> getThree_list() {
		return three_list;
	}
	/**
	 * @param three_list the three_list to set
	 */
	public void setThree_list(List<ModuleVo> three_list) {
		this.three_list = three_list;
	}
}
 

b:dao层方法

/**
	 * 一级一级的查询权限
	 * @param grade
	 * @return
	 */
	public List<ModuleVo> selectByGrade(@Param("grade") String grade,@Param("groupId") int groupId);

c:使用的mybatis  

<!-- 	 一级一级的查询权限 -->
   <select id="selectByGrade" resultType="com.XinjueManager.meta.vo.ModuleVo">
		SELECT
			m.*
		FROM
			`groupModule` g,
			module m
		WHERE
			g.groupId = #{groupId}
		AND m.moduleId = g.moduleId
		AND m.parModuleCode = #{grade}
		ORDER BY
			m.sequence ASC;
   </select>

 

d:最后实现查询权限列表

List<ModuleVo> list = moduleService.selectByGrade("0", 1); //一级权限  1--是分组ID
			if(list.size()>0){
				for (int i = 0; i < list.size(); i++) {
					ModuleVo moduleVo = list.get(i);
					List<ModuleVo> two_list = moduleService.selectByGrade(moduleVo.getModuleCode(), 1); //二级权限
					if(two_list.size()>0){
						list.get(i).setTwo_list(two_list);
						for (int j = 0; j < two_list.size(); j++) {
							List<ModuleVo> three_list = moduleService.selectByGrade(two_list.get(j).getModuleCode(), 1);//三级权限
							if(three_list.size()>0){
								two_list.get(j).setThree_list(three_list);
							}
						}
					}
				}
			}

菜单栏的效果红色的是一级菜单  蓝色的二级菜单  黄色的是三级菜单

 

 

最后在附一份请求到的数据列表 json格式的数据 icon是图标  根据自己需求来 可以为空

{
    "data": [
        {
            "icon": "&#xe6b8;",
            "level": 1,
            "moduleCode": "yh01",
            "moduleId": 1,
            "moduleName": "用户管理",
            "parModuleCode": "0",
            "sequence": 1,
            "two_list": [
                {
                    "level": 2,
                    "moduleCode": "yh001",
                    "moduleId": 2,
                    "moduleName": "用户列表",
                    "parModuleCode": "yh01",
                    "sequence": 1,
                    "url": "/usersList"
                },
                {
                    "level": 2,
                    "moduleCode": "yh002",
                    "moduleId": 3,
                    "moduleName": "心理师列表",
                    "parModuleCode": "yh01",
                    "sequence": 2,
                    "url": "/usersList_xls"
                },
                {
                    "icon": "&#xe70b;",
                    "level": 2,
                    "moduleCode": "yh003",
                    "moduleId": 86,
                    "moduleName": "会员管理",
                    "parModuleCode": "yh01",
                    "sequence": 3,
                    "three_list": [
                        {
                            "level": 3,
                            "moduleCode": "yh0001",
                            "moduleId": 87,
                            "moduleName": "会员删除",
                            "parModuleCode": "yh003",
                            "sequence": 1,
                            "url": "/huiyuandel"
                        },
                        {
                            "level": 3,
                            "moduleCode": "yh0002",
                            "moduleId": 88,
                            "moduleName": "等级管理",
                            "parModuleCode": "yh003",
                            "sequence": 2,
                            "url": "/denj"
                        }
                    ],
                    "url": "/huiyuan"
                }
            ],
            "url": ""
        },
        {
            "icon": "&#xe723;",
            "level": 1,
            "moduleCode": "dd01",
            "moduleId": 89,
            "moduleName": "订单管理",
            "parModuleCode": "0",
            "sequence": 2,
            "two_list": [
                {
                    "level": 2,
                    "moduleCode": "dd001",
                    "moduleId": 90,
                    "moduleName": "订单列表",
                    "parModuleCode": "dd01",
                    "sequence": 1,
                    "url": "/orderList"
                },
                {
                    "level": 2,
                    "moduleCode": "dd002",
                    "moduleId": 91,
                    "moduleName": "订单评价",
                    "parModuleCode": "dd01",
                    "sequence": 2,
                    "url": "/evaluatelist"
                }
            ]
        }
    ],
    "errMsg": "",
    "status": "success",
    "totalCount": 0
}

 

posted @ 2022-08-04 19:13  码奴生来只知道前进~  阅读(232)  评论(0编辑  收藏  举报