权限管理系统笔记

一.项目搭建

1.1  项目多模块的构建

1.2 项目的热部署

二 shiro的认证

1. shiro 实现认证登录,在reaml中判断用户密码

用登录页面输入的明文密码+数据库之前存储的salt,再次进行加密后的密码和数据库中已经存储的加密密文进行比较判断

2.验证码的实现

3.访问login.html页面,设置判断用户是否认证通过


 

 

三 shiro认证后信息处理

3.1. 加载用户信息提供给前端

1.将登录成功的用户的信息,抽取到abastactController里面,方便以后进行获取:

2.放到map中

3.页面进行获取

3.2.前端页面的布局

使用iframe框架

四  岗位

1.mybaits-plus插件中分页的插件需要加:PaginationIntegerceptor,不然查询的是全部

2.新增数据的校验插件

重复数据的提示:

3.批量删除

五 部门

5.1 树状层级菜单

页面父部门与子部门的层级,使用树状层级插件TreeGrid,只需后端传输给前端制定的json的list串,TreeGrid自动实现层级关系

通过name,parentName实现树状层级关系

后端代码:

5.2 zTree实现树状

前端页面设置好parentId,departId,插件自动实现树状关系

5.3 删除部门判断是否有子部门

六 菜单

6.1 新增

1.在页面虚拟一个根部顶级域名,parentid设置为-1,menid为0;

2.在新增时候,做校验,

1.目录页面

2.菜单页面

3. 修改按钮的菜单

注意: 授权编码必须是程序中在controller中的方法编写好的合法编码,不然瞎写的不起作用。

6.2 删除

1.通过menuid去数据查询一下,如果不存在,提示输入字符非法

2.通过menuid查询该菜单下是否有子菜单,存在提示“有子菜单,不允许删除”

3.删除通过menuid删除tb_menu 和role_menu_relation_tb两张表中的数据,并且在代码中,使用@Transaction事务。报错可以进行回滚。

七 角色

7.1  页面布局与采用插件

7.2  插入操作

1.首先需要向role表插入信息

2.通过roleid删除,role-menu-relation表中之前的旧信息,然后再批量插入。

3.通过roleid删除,role_depart_relation表中之前的旧信息,然后再批量插入。

4.以上方法都要加上事务注解

 

7.3 修改角色

1.需要在修改角色的页面,动态加载所有是数据权限,(部门树状),功能权限(菜单树状结构)

2.通过roleid查询出,该角色所属的部门结合,菜单集合

3.在页面进行遍历部门,菜单结合,属于已有的部门,菜单均变为选中状态。

4.update保存数据,和save新增的逻辑一样

设置自己所属资源,都处于选中状态:

页面效果:

7.4 删除

1.在删除的方法加@Transaction注解

2.通过roleid先删除role表中的信息;

3.接着删除角色-菜单关联表中的数据、删除角色-部门关联的数据,删除角色-用户关联的数据

八  用户

8.1 用户查询

1.加载用户信息,通过userId查询岗位,部门信息

8.2 新增

1.弹出的页面要加载部门,角色,岗位的信息的树状结构

2.在add时候

2.1.要做校验,各个字段做一些长度,空白校验

2.2 需要验证用户的唯一进行校验

2.3 对密码进行设定的加密规则,md5+salt等操作

2.4 封装好的用户信息,插入到用户表中。

2.5 通过userid (使用了mybaits-plus 添加数据自动返回数据的自增主键,得到userId)删除用户-角色  关系表中,关于该用户的所有角色,然后再向用户-角色关联表中,重新插入数据,维护其关系。

2.6 通过userid 删除用户-岗位 关系表中,光宇该用户的所有岗位,让后再向用户-岗位关联表中,重新插入数据,维护其关系。

2.7 在service层中,针对以上操作,写到一个方法中去,加上@Transaction事务,出现异常可以回滚。

8.3  修改之-加载

1.首先通过userid,从用户表users加载改用户的基本信息,

2.通过userid,加载用户-角色表中,所属的角色id的list,

3通过userid,加载用户-岗位表中,所属的岗位id的list,

4..将这些信息在修改弹框中,进行加载,加载全部的部门信息树状图,并通过user中的departid,确定改用户所属部门进行选中

5.加载全部的角色信息大list,并将用户所属的角色的小list,在大list进行自动判读,进行选中

6.加载全部的岗位信息大list,并将用户所属的岗位的小list,在大list进行自动判读,进行选中

下图中user里面的roleIdlist,postidlist,经过userid查询后端,和用户实体绑定在一起,进行了回显,这里自动有值了,见1,2,3的逻辑 

 

自动选中

 

8.4 修改之-update

1.首先进行校验,然后进行update

2.通过userId判断用户是否已经存在,判断唯一性

3.将明文密码重新按照之前制定的规则,生成加密的密文密码。

4.通过用户id去修改用户-角色关联表(先删除,后添加);

5.通过用户id去修改用户-岗位关联表(先删除,后添加);

6.添加@Transaction 事务的注解

 

8.4 删除用户

1.删除用户要提示确定是否删除。

2.有两种用户不能删除:超级管理员、当前登录的用户不能删除。

3.先删除用户表;

4.删除用户-角色关联表中的信息

5.删除用户-岗位关联表中的信息

8.6 重置密码

1.将本次的明文密码+之前的旧salt,生成新的密码

2.封装到实体中,通过userId进行批量更新

 

九 shiro的授权处理

9.1 逻辑

1.获取当前登录用于所属的角色列表,从而间接获取对应的“权限资源”

2. 主题,资源,权限的关系

3.授权:主题对哪些资源具有哪些权限操作。

 9.2  流程

 

9.3 操作逻辑

1.获取当前登录的用户信息

2.是超级管理员加载菜单的全部信息

3.非超级管理员,则通过userId查询user_role_relation、role_menu_relation、menu_tb 这个三个表关联查询出用户的菜单权限

4.对菜单权限,进行汇总去重。

9.4   设置逻辑权限判断

9.4.1.模拟登陆

http://localhost:8081/pmp/sys/login

 

 

9.4.2. 案例按照某个id查询用户信息

在地址栏输入:http://localhost:8081/pmp/sys/info/6

当登录的用户没有权限时,执行如下:

1.当访问info这个方法,前面加上@RequiresPermission("{sys:user:list}")这个权限注解,就会调用自定义UserReaml,

 

2.调用自定义的userReam的doGetAuthorizationInfo(PrincipalCollection  principalCollection) 方法

3.执行到这里报错,将该用户具有的权限放到simpleAuthorizationInfo中,查询出的该用户的所有权限字符和要访问的方法的权限字符,自动匹配发现是否能匹配,匹配上返回数据,匹配不上报错

9.4.3 没有权限的处理逻辑

1.统一捕获到未授权的异常,然后进行处理,返回给前端提示:"没有权限操作"!

注意这里,@ExceptionHandler(AuthorizationException.class) 这里的异常一旦捕获到是验证授权异常,就是触发此方法。

页面提示:

9.4.4 有权限的处理逻辑

当拥有执行访问的权限时,返回的数据,如下图所示:

十 授权加载左边菜单导航栏

10.1 说明

当页面加载index.html时,index.js就会被加载,同时会调用getMenuList方法和getInfo方法

2.调用后端菜单项: 

10.2 后端方法:获取首页左边导航菜单栏

1.获取左边导航菜单栏

2.如果是超级管理员,遍历获取一级菜单。

 

3.如果是非超级管理员,通过userId关联sys_user_role_,sys_role_menu,sys_menu获取用户拥有的菜单id,遍历获取一级菜单。然后从用户拥有的菜单id中,找出一级菜单,然后递归获取一级菜单下的所有子菜单。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值