📖MealS(干饭人)用户角色权限集增强版脚手架

发布: 2022-09-02
热度: 36
趋势: 36
权重: 8
🎯

MealS是基于Meal开源工程进行了增强,提供将权限粒度细分到接口/按钮级,采样用户-角色-权限集的方式进行授权、鉴权,可以自行定义角色所具备的权限集,实现更高粒度的权限控制能力。

基本信息

Meal'S 是对 Meal 工程的增强版。

Meal'S 依旧不会包含过多的业务逻辑,提供用户-角色-权限集的基础管理能力。

Meal'S 可以实现自定义角色并为角色自由赋予权限,最终用户所具备的权限集是其所选择的角色权限集的并集。

Meal'S 工程为了提升效率设置了相对科学的缓存命名空间,下文中会详细说明。

服务端工程地址:GiteeGitHub

前端工程地址:GiteeGitHub

特别致谢

Meal'S 服务端使用 MyBatis-Plus 作为基础脚手架。

Meal'S 服务端使用 jjwt 实现 JWT 快速加解密。

Meal'S-ui 前端工程 Fork 自 vue-admin-template

本人是 JAVA 服务端开发,@ 花裤衩的前端系列开源项目为我学习 Vue 提供非常大的帮助,非常感谢!

功能清单

Meal'S 工程仅提供了最基本的账号-角色-权限集支撑能力,没有涉及其他功能页面。

为了提供更为友好的体验,提供了账号查看自身权限集的能力。

登陆页

SC-293-meals1.jpg

个人中心

SC-294-meals2.jpg

账号管理

SC-295-meals3.jpg

角色管理

SC-296-meals4.jpg

SC-297-meals5.jpg

权限集查看

SC-298-meals6.jpg

代码生成

SC-299-meals7.jpg

开发说明

服务端

外部依赖

  1. JDK 1.8 已知可能持续使用很长时间的版本
  2. MySql 5.7 经典版本
  3. Redis 6.0 比较新的一个版本(实际上目前项目中对版本要求没有十分严格)

基本缓存结构说明

Meal'S 才用了 Redis 作为默认缓存工具,为了提升鉴权和查询性能,主要实现两大缓存。

权限树缓存:用于界面渲染树形结构。

权限集缓存:用户服务端接口鉴权。

设置缓存的主要目的用于降低数据库查询压力,尤其是查询权限树时,需要组装树形结构。

SC-300-meals8.jpg

工程目录

SC-301-meals9.jpg

核心类

  • MyBatisPlusConfig:MyBatis-Plus 配置类,配置 Mapper 扫描位置、分页插件等。
  • RedisConfig:配置 Redis 为默认缓存工具及常见操作 Bean 配置。
  • CodeMakerUtils:代码生成器的执行类
  • JwtUserContext:JWT 安全用户上下文对象(全局获取登录用户信息)
  • JwtFilter:Jwt 过滤器,核心过滤器(登录、授权、拦截)
  • ExceptionHandler:全局异常捕获处理(AOP 实现,支持自定义异常处理)
  • AuthorizeInterceptor:权限拦截器(基于自定义注解 @Authorize 实现鉴权)
  • EncryptionUtils:盐值加密工具(账号的密码生成,不可逆加密算法)
  • SysInitTask:系统启动任务(当前主要缓存全部权限树)
  • ThreadAuthRole:角色权限变动线程(根据变动的角色 ID 更新角色、涉及用户权限相关缓存)
  • ThreadPoolConfig:基于 Spring 的线程池配置

开发说明

  1. 数据库初始化刷库
  2. application-dev.yml 配置您的数据库信息和 redis 信息(默认 localhost)
  3. 启动 App 类

启动示意图:

SC-302-meals10.jpg

前端

外部依赖

  1. Node.js(基本工具)
  2. Git(多数前端工程依赖会需要调用 Git 下载)

工程目录

因为 Meals-ui 和 Meal-ui 的工程目录结构没有产生变动,因此此处直接引用了 Meal-ui 的工程目录结构图。

SC-303-meals11.jpg

SC-304-meals12.jpg

相对原本的改动

  1. 移除 Mocks 模拟返回服务(调用 meal 服务端工程)
  2. 移除测试模块以及相关依赖
  3. 移除 Cookies 插件依赖,Cookies 统一替换为 window.localStorage
  4. 补充动态路由由服务端返回的用户角色集 Roles 控制
  5. 移除自定义 icon(svg 格式),替换为 element-ui 的图标,直接修改了 Sidebar/Item.vue
  6. 核心方法 getUserBase 获取用户基础信息 src/store/modules/user.js getInfo()
  7. 增加 v-droll 可以自由在屏幕范围内拖动弹窗(src/directive/droll.js)

以下为 Meals-ui 基于 Meal-ui 增加的主要改动。

  1. 增加自定义指令 v-authorize 判断界面按钮菜单是否具备权限
  2. 修改路由 rolse 为 auth(路由指定唯一 auth 标示需要的权限)
  3. 代码生成器增强,支持模糊查询表名,支持多选生成代码
  4. 对原本的 element-ui 主题配色进行了修改
<!-- v-authorize使用方式 -->
<button type="button" v-authorize="'SYS-USER-M'" />

启动界面

SC-305-meals13.jpg

开发说明

# 依赖下载
npm install
# 开发模式
npm run dev
# 生产编译
npm run build
当前文章暂无讨论,留下脚印吧!
大纲
  • 基本信息
    • 特别致谢
  • 功能清单
    • 登陆页
    • 个人中心
    • 账号管理
    • 角色管理
    • 权限集查看
    • 代码生成
  • 开发说明
    • 服务端
      • 外部依赖
      • 基本缓存结构说明
      • 工程目录
      • 核心类
      • 开发说明
    • 前端
      • 外部依赖
      • 工程目录
      • 相对原本的改动
      • 启动界面
      • 开发说明
提交成功,请等待审核通过后全面展示!

发表评论

昵称
邮箱
链接
签名
评论

温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。

选择头像