权限管理设计(菜单栏)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": "",
"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": "",
"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": "",
"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
}