当前位置: 首页 > news >正文

医药采购系统平台第4天03:实现根据用户的角色显示不同用户的权限菜单编写拦截器实现权限拦截模块的开发流程和测试流程小节

如果想要获取相关的源码,笔记,和相关工具,对项目需求的二次开发,可以关注我并私信!!!


四 权限管理(用户授权)的应用:根据用户的角色显示不同用户的权限菜单

经过上面的与第三方系统的成功的接入,而且在“角色管理”菜单中也对需要授权的角色进行了授权--->给一级菜单和二级菜单授权给了卫生室,那么,接下来就需使用卫生室登录系统,看看页面中的导航菜单中是否显示了添加的一级菜单和二级菜单导航菜单!

简单说,本节中所要实现的功能是:验证用户的权限菜单!就是使用不同的用户登录系统,并根据用户的角色获取他的权限菜单,并在左侧页面中的导航栏中显示!

即:根据不同用户的登录来显示不同用户的菜单!

举例来说:使用卫生局和卫生室两个角色分别登录系统,在导航栏中的权限菜单的显示也是不同的!

因此,first.jsp页面中发送的请求中的Menu.json文件可以不需要了!同时,本节的内容需要和第7节的内容分步来实现权限管理的应用的

该节内容总结就是:

用户登录成功后,根据用户所属的角色来从数据库中查出用户的菜单权限,然后将菜单权限存储至session中,从而实现不同的用户登录,显示出不同的菜单

因此,也可以说菜单权限属于粗颗粒度的权限管理范畴!

1 DAO

1.1 sql语句的编写(有难度

再次强调:在写sql语句之前,必须要对这9张表之间的关系烂熟于心

这9张表之间的关系可以参考“第三方用户授权系统表关系.xlsx”文件,或者参考“本系统的权限管理模型”一节中的内容和视频!!

需求:根据用户角色获取该角色下所有的一级和二级菜单。注意:是所有的一级和二级菜单,而不是某个一级菜单下的二级菜单!这样做是为了节省性能。

主查询表:权限菜单表bss_sys_module表可以查看所有的一级菜单和二级菜单,它是一个树形结构。其中parentid字段值为0表示一级菜单,而parentid的值中不为0的都是二级菜单,并且,所有的二级菜单中都有url链接地址.

如下图:

关联查询表:角色表、角色系统关系表、角色节点关系表、角色菜单关系表、角色操作关系表。

--查询某个卫生室的所有一级和二级菜单

select m1.moduleid menuid,

       m1.name menuname,

       m2.moduleid menuid_two, 

--之所以别名是menuid_two,而不是menuid.是因为mybatis对于结果集中两个相同的menuid字段是无法实现映射的,虽然这两个字段的内容相同,但是字段名称绝对不可以相同。

       m2.name menuname_two,

       m2.url

  --这里设定m1中存放的是所有的一级菜单,m2中存放的是所有的二级菜单

from bss_sys_module m1, bss_sys_module m2

--自连接条件

 where m2.parentid = m1.moduleid

   and m1.parentid = '0'   --表示所有的一级菜单

   and m2.parentid != '0'  --表示所有的二级菜单

 --该条件用来限定某个角色下所有的二级菜单,因此,范围在m2.moduleid之内     

   and m2.moduleid in  

       (

        

        ---限定某个角色范围内的菜单

        select bss_sys_rolemodule.moduleid

          from bss_sys_role,

                bss_sys_rolesys,

                bss_sys_rolenode,

                bss_sys_rolemodule,

                bss_sys_roleoperate

                --角色表和角色系统表的关联

         where bss_sys_role.roleid = bss_sys_rolesys.roleid

                 

           and bss_sys_rolenode.rsid = bss_sys_rolesys.rsid

           and bss_sys_rolemodule.rnid = bss_sys_rolenode.rnid

           and bss_sys_roleoperate.rmid = bss_sys_rolemodule.rmid

           ---假设角色id是卫生室

           and bss_sys_role.roleid = '511A6F41419949C38122A94310DADD14')

 order by m1.showorder, m2.showorder  ---排序,showorder字段是排序字段  

1.2 VO类的定义

VO的定义--->Menu.java

其中定义的:List<Menu>  meus属性中存储的是二级菜单。

这Menu类中属性的定义就是一对多的结构定义。(牢记)!

之所以单独定义一个Menu类,是为了方便直接转换成json格式的数据,因为页面中的权限菜单需要使用JSON格式的数量来显示(这是该系统的开发规范之一)!

(可以参考下面的FirstAction类中的获取菜单方法usermenu()方法会使用到).

1.3 mapper映射文件的定义(一对多查询)

因为是一对多的映射,即:一个用户(角色)对应多个权限菜单,所以必须使用resultMap实现映射

关于该映射文件中各个属性的含义,请参考“mybatis的高级知识.doc”文档!!!!

在SysuserMapperCustom.xml映射文件中添加如下内容:颜色加深加粗的都是添加的内容。

<!-- 一对多映射 -->

<resultMap id="findMenuByroleidResultMap" type="yycg.base.pojo.vo.Menu">

<!-- column=menuid表示唯一的数据库查询语句中的主键。因为在sql语句的结果集中,mybatis会自动把结果集中的menuid主键字段相同的记录进行合并 -->

<id column=

相关文章:

  • FileReader 详细解析与记忆方法
  • DataEase同比环比
  • 微信小程序实战案例 - 餐馆点餐系统 阶段 2 – 购物车
  • 嵌入式常见概念的介绍
  • C++ 重构muduo网络库
  • FPGA 37 ,FPGA千兆以太网设计实战:RGMII接口时序实现全解析( RGMII接口时序设计,RGMII~GMII,GMII~RGMII 接口转换 )
  • 微信小程序跳4
  • RT-2论文深度解读:视觉-语言-动作统一模型的机器人泛化革命
  • AI NAS:当网络存储与人工智能深度融合的技术路径与未来展望
  • nvm使用手册
  • java零基础教学笔记
  • 02核心-EffectSpec,EffectContext
  • RV1106 OCR 识别算法
  • 代码随想录算法训练营day3(链表)
  • 流与分组的共生关系
  • vue + uniapp 实现仿百度地图/高德地图/美团/支付宝 滑动面板 纯css 实现
  • Matlab个性化绘图第10期—滑珠进度柱状图
  • 富文本编辑器的内容导出html,并保留图片
  • 【第41节】windows的中断与异常及异常处理方式
  • 【第四十周】文献阅读:用于检索-增强大语言模型的查询与重写
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应
  • 中国物流集团等10家央企11名领导人员职务任免
  • 新华时评:让医德医风建设为健康中国护航
  • 远洋集团:今年前4个月销售80.9亿元,同比增加13.62%
  • 当代科技拟召开债券持有人会议 ,对“H20科技2”进行四展
  • 刘国中:持续加强护士队伍建设,更好保障人民身体健康