Day98 Java项目 (SSM+Dubbo)商城(七) 授权

1.RBAC模型

一.什么是RBAC

  1. 权限系统提的最多的就是 RBAC(Role-Based Access Control 基于角色的访问控制)。 所谓角色,其实就是权限的集合,某个角色就是某几个权限的结合。其目的是为了简化授权和鉴权的过程。

二.表结构分析

  1. 企业开发中 RBAC模型设计为7张表,其中4张为基础表,3张为中间表。
  2. 用户与角色
    用户和角色为多对多关系,通过用户角色中间表关联
    tb_admin 管理员表:

    tb_role 角色表:

    tb_admin_role 管理员角色中间表:
  3. 角色与权限
    角色和权限为多对多关系,通过角色权限中间表关联
    tb_role 角色表:

    tb_resource 权限表(资源表):

    tb_role_resource 角色资源中间表:
  4. 权限与菜单
    权限和菜单为多对多关系,通过权限菜单中间表关联
    tb_resource 权限表(资源表):

    tb_menu 菜单表:

    tb_resource_menu 资源菜单中间表:

2.管理员角色设置

一.需求分析

  1. 管理员和角色为多对多关系,在保存管理员时实现对管理员角色中间表的添加。

二.思路分析

  1. 提交角色设置
    1. 创建管理员角色中间表的实体类和数据访问接口
    2. 创建组合实体类,包含管理员实体类和角色ID集合两个属性
    3. 修改管理员实体类,为id添加以下注解可以标识该主键为自增
    4. 修改管理员add方法,取出管理员实体保存,取出角色ID集合,循环添加到管理员角色中间表。
    5. 注意在保存管理员密码时需要对密码进行bcrypt加密。
    6. “所属角色”使用elementui的select选择器 ,为 el‐select 设置 multiple 属性即可启用多选
  2. 读取角色设置
    1. 修改findById方法的返回值为组合实体类,修改其中的逻辑,组合实体类的角色id集合需要查询管理员角色中间表。
    2. 修改update方法,删除原来的相关的中间表数据,再循环添加中间表数据。
    3. 读取后需要把密码属性设置为null, 如果用户没有在界面输入密码则保持密码不变,如果填写了密码需要进行bcrypt加密。

3.角色权限设置

一.需求分析

  1. 显示所有的权限列表,并自动勾选已经保存的权限。用户勾选权限后,点击提交,将勾选的权限id提交给后端保存

二.思路分析

  1. 提交权限设置
    1. 创建角色权限中间表的实体类和数据访问接口
    2. 前后端约定要提交的数据格式,包括“角色id”和“权限id列表”。根据约定的数据格式创建组合实体类。
    3. 后端添加方法,接收组合实体类参数,提取“角色id”和“权限id列表”,循环读取权限id插入到角色权限中间表中。
  2. 读取权限设置
    1. 后端查询权限表(资源表),以树状结构返回数据。前端使用两层v-for循环输出列表。
    2. 后端添加方法,根据角色查询权限id列表,前端获取权限id列表后实现复选框的勾选。

4.用户权限设置

一.需求分析

  1. 当用户执行一个不存在的权限的url,需要拦截请求。

二.spring security授权控制

  1. 基于URL访问控制
    在UserDetailsServiceImpl的loadUserByUsername方法,实现对当前用户的授权

    修改applicationContext_security.xml

    hasAnyAuthority():拥有任意权限都可以访问
    hasAuthority('brand'): 拥有brand的权限可以访问
    hasAnyAuthority('goods_add','goods_edit')" :拥有goods_add和goods_edit其中一个权限就可以访问
  2. 基于方法的访问控制
    对当前用户授权,同上 ,对方法的访问控制如下:
    1. 修改applicationContext_security.xml ,增加配置 ,启用注解
    2. 在进行权限控制的方法上添加注解

三.思路分析

  1. 编写SQL语句,通过登录名查询资源KEY列表
  2. 数据访问接口新增方法,根据登录名查询资源KEY列表
  3. 服务层实现根据登录名查询资源KEY列表
  4. UserDetailsServiceImpl的loadUserByUsername方法,调用根据登录名查询资源KEY列表的方法,将资源key列表添加到当
    前用户。
  5. )修改applicationContext_security.xml,添加对url的拦截,或在方法上添加注解实现对方法的拦截。

5.用户菜单筛选

一.需求分析

  1. 用户登录后进入主界面,显示的菜单为用户所拥有的权限关联的菜单。不具有权限的菜单不显示。

二.思路分析

  1. 编写SQL语句,根据当前登录名获取菜单列表的方法

    注意通过上述语句,获取的菜单列表只包含三级菜单,而我们需要返回包括一级菜单、二级菜单和三级菜单的菜单列表。只要三级菜单存在,就要有它的二级菜单;只要有一个二级菜单就要有它的一级菜单。
  2. 查询二级菜单列表:
  3. 查询一级菜单列表:
  4. 最后我们通过UNION运算符将三个语句连接成一条语句
  5. 将上述SQL封装为查询方法
  6. 在controller获取当前用户名,调用上述查询方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为主体框架,使用AdminLTE作为前端框架,使用主流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息中间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目中带大家学习前端相关的Jquery、Bootstrap等知识。课程结束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息中间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值