1:设计的数据库列表

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


 

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

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


 


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

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


 


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

数据权限框架java java权限表设计_数据

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

数据权限框架java java权限表设计_List_02

2:代码实现查询权限列表 

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


 

1. package com.XinjueManager.meta.vo; 
2.  
3. import java.util.List;
4.  
5. import com.XinjueManager.meta.Module;
6.  
7. /** 
8. * @author tqf
9. * @version 创建时间:2019-8-9 上午9:44:29 
10. * 类说明:
11. */
12. public class ModuleVo extends Module{
13.  
14. /**
15. * 
16. */
17. private static final long serialVersionUID = -2224819239116246876L;
18.  
19. private List<ModuleVo> two_list; //二级菜单
20. private List<ModuleVo> three_list; //三级菜单
21.  
22. /**
23. * @return the two_list
24. */
25. public List<ModuleVo> getTwo_list() {
26. return two_list;
27. }
28. /**
29. * @param two_list the two_list to set
30. */
31. public void setTwo_list(List<ModuleVo> two_list) {
32. this.two_list = two_list;
33. }
34. /**
35. * @return the three_list
36. */
37. public List<ModuleVo> getThree_list() {
38. return three_list;
39. }
40. /**
41. * @param three_list the three_list to set
42. */
43. public void setThree_list(List<ModuleVo> three_list) {
44. this.three_list = three_list;
45. }
46. }

b:dao层方法


 

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

c:使用的mybatis  


 

1. <!-- 一级一级的查询权限 -->
2. <select id="selectByGrade" resultType="com.XinjueManager.meta.vo.ModuleVo">
3. SELECT
4. m.*
5. FROM
6. `groupModule` g,
7. module m
8. WHERE
9. g.groupId = #{groupId}
10. AND m.moduleId = g.moduleId
11. AND m.parModuleCode = #{grade}
12. ORDER BY
13. m.sequence ASC;
14. </select>

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


 


1. List<ModuleVo> list = moduleService.selectByGrade("0", 1); //一级权限 1--是分组ID
2. if(list.size()>0){
3. for (int i = 0; i < list.size(); i++) {
4. ModuleVo moduleVo = list.get(i);
5. List<ModuleVo> two_list = moduleService.selectByGrade(moduleVo.getModuleCode(), 1); //二级权限
6. if(two_list.size()>0){
7. list.get(i).setTwo_list(two_list);
8. for (int j = 0; j < two_list.size(); j++) {
9. List<ModuleVo> three_list = moduleService.selectByGrade(two_list.get(j).getModuleCode(), 1);//三级权限
10. if(three_list.size()>0){
11. two_list.get(j).setThree_list(three_list);
12. }
13. }
14. }
15. }
16. }

菜单栏的效果

数据权限框架java java权限表设计_数据权限设计思路 java_03

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

 

 

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


 

1. {
2. "data": [
3. {
4. "icon": "",
5. "level": 1,
6. "moduleCode": "yh01",
7. "moduleId": 1,
8. "moduleName": "用户管理",
9. "parModuleCode": "0",
10. "sequence": 1,
11. "two_list": [
12. {
13. "level": 2,
14. "moduleCode": "yh001",
15. "moduleId": 2,
16. "moduleName": "用户列表",
17. "parModuleCode": "yh01",
18. "sequence": 1,
19. "url": "/usersList"
20. },
21. {
22. "level": 2,
23. "moduleCode": "yh002",
24. "moduleId": 3,
25. "moduleName": "心理师列表",
26. "parModuleCode": "yh01",
27. "sequence": 2,
28. "url": "/usersList_xls"
29. },
30. {
31. "icon": "",
32. "level": 2,
33. "moduleCode": "yh003",
34. "moduleId": 86,
35. "moduleName": "会员管理",
36. "parModuleCode": "yh01",
37. "sequence": 3,
38. "three_list": [
39. {
40. "level": 3,
41. "moduleCode": "yh0001",
42. "moduleId": 87,
43. "moduleName": "会员删除",
44. "parModuleCode": "yh003",
45. "sequence": 1,
46. "url": "/huiyuandel"
47. },
48. {
49. "level": 3,
50. "moduleCode": "yh0002",
51. "moduleId": 88,
52. "moduleName": "等级管理",
53. "parModuleCode": "yh003",
54. "sequence": 2,
55. "url": "/denj"
56. }
57. ],
58. "url": "/huiyuan"
59. }
60. ],
61. "url": ""
62. },
63. {
64. "icon": "",
65. "level": 1,
66. "moduleCode": "dd01",
67. "moduleId": 89,
68. "moduleName": "订单管理",
69. "parModuleCode": "0",
70. "sequence": 2,
71. "two_list": [
72. {
73. "level": 2,
74. "moduleCode": "dd001",
75. "moduleId": 90,
76. "moduleName": "订单列表",
77. "parModuleCode": "dd01",
78. "sequence": 1,
79. "url": "/orderList"
80. },
81. {
82. "level": 2,
83. "moduleCode": "dd002",
84. "moduleId": 91,
85. "moduleName": "订单评价",
86. "parModuleCode": "dd01",
87. "sequence": 2,
88. "url": "/evaluatelist"
89. }
90. ]
91. }
92. ],
93. "errMsg": "",
94. "status": "success",
95. "totalCount": 0
96. }