java 菜单权限设计【转存】

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;

d:在你登录的用户表中 添加一个字段 groupId 分组ID 就可以知道 当前登录用户有哪些权限啦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. }

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

 

 

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

 
  1. {

  2. "data": [

  3. {

  4. "icon": "&#xe6b8;",

  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": "&#xe70b;",

  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": "&#xe723;",

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾利克斯冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值