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
-
}