SpringBoot2构建基于RBAC权限模型的驾校代理小程序后端

本项目是使用SpringBoot2构建的一套基于RBAC权限模型的后台管理系统,前端是微信小程序。前端

项目地址:

github.com/fuyunwang/D…git

项目的原因

最近接了个外包,主要是针对于驾校开发一个代理小程序。目的是为了方便驾校的管理来招揽学员,同时方便维护学员和代理信息。github

项目介绍

项目业务功能介绍

本项目的业务需求比较少,是一个传统项目,核心的业务点是权限管理,这里我就采用比较规范的RBAC权限模型来开发。因为项目比较小,这里我就没有采用Shiro或SpringSecurity等权限管理框架,而是本身使用过滤器开发了一套。我认为这能够算是权限管理的雏形,若是有更复杂的权限管理需求,能够很方便的基于此扩展。apache

  1. 管理员角色为最高权限,帐户为admin,初始密码为123456。
  2. 管理员能够建立一级代理、添加学员。
  3. 一级代理能够建立二级代理、添加学员。可是一级代理建立的代理和学员初始为未审核状态,只有超管才能审核
  4. 二级代理只有在审核经过后才能添加学员且二级代理不能建立代理。
  5. 针对每一个代理获取其下的全部学员,若是是超管或一级代理获取其添加学员的同时获取其下子代理的学员。
  6. 排行榜系统。根据每一个代理所添加的代理或学员数(包括子代理的学员数)来肯定代理的业绩。得到日业绩排行和总业绩排行
  7. 针对排行榜中的代理进行点赞和评论。
  8. 批量导出指定代理下的学生数据
  9. 删除指定代理,并将代理下的学生添加到父级代理上

技术实现

  1. 首先认证方面,我这里仍然采用jwt token的认证方式。这里我默认实现了记住密码的功能。即用户第一次登录成功以后返回一个token在response header中,该token的有效期为2小时,服务器端我保存一个有效期为1周的refresh token。用户在2个小时以内登陆不会返回token,2个小时和一周以内第一次携带过时token我会返回新的token在response header。一周以外refresh token失效,这里须要用户从新登陆。 这里我也是借鉴了别人的思路:segmentfault.com/a/119000001…小程序

  2. 权限管理方面,我这里共用了4张表,其实基准的RBAC权限模型最少要5张表。这里比较简单,因此我主要是用户表、角色表、权限表以及权限角色表。用户和角色是一对一的关联关系、角色和权限是一对多的关系。表结构以下:segmentfault

  1. Filter实现权限过滤。这里比较简单,可是记录一个比较鸡肋的事。就是在SpringBoot中使用Filter时,SpringBoot提供了@ServletComponentScan(basePackages = "com.beautifulsoup.driving")@WebFilter@Order注解,可是这里的@Order并不能实现多个Filter的顺序性,无奈我只能采用FilterRegistrationBean来注入Filter,同时请求第一步进入的是Filter且其不被Spring管理,故而不能经过@Autowired注解只能构造方法注入。Filter内部用ThreadLocal保存用户信息,校验用户的权限,ThreadLocal做为线程级别对象,对于SpringSecurity中的用户信息保存也是基于此的。
  2. 数据访问层,这里我使用的Spring Data。包括Spring Data Jpa和Spring Data Mongodb。传统项目不必针对SQL作太多优化,这里我就纯ORM。
  3. 排行榜系统,仍然是记录用户添加代理和学员以后记录入Redis。ZSET记录用户的日业绩和总业绩,而后将前10名从Hash中返回,提高效率。
  4. 点赞仍然使用Redis维护代理的点赞数、评论数据入Redis。
  5. 导出Excel,方便管理员维护代理和学员数据,这里采用Apache POI

小程序界面展现:

接口文档:

文档地址:

github.com/fuyunwang/D…微信小程序

例子:

技术包括

  1. Spring Boot 2.1.3服务器

  2. Spring Data Jpa微信

  3. Spring Data Redis框架

  4. Spring Data Mongodb

  5. Spring Boot Mail

  6. Swagger

  7. Quartz

  8. JWT Token

  9. FastDFS

  10. apache poi

要点

  1. 热点数据入Redis,提升SQL的查询性能
  2. 认证采用Jwt Token+Refresh Token+黑名单策略,提升用户体验
  3. 权限管理采用规范的RBAC权限模型
  4. 点赞、排行等数据入Redis,天天进行一次Quartz任务调度,Redis中数据落库
  5. 评论、发布公告等信息入Mongodb,便于存储、操做
相关文章
相关标签/搜索