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

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

项目地址:

github.com/fuyunwang/D…

项目的缘由

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

项目介绍

项目业务功能介绍

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

  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张表。这里比较简单,所以我主要是用户表、角色表、权限表以及权限角色表。用户和角色是一对一的关联关系、角色和权限是一对多的关系。表结构如下:

  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,便于存储、操作

转载于:https://juejin.im/post/5ca86a07e51d4578e5153a9b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

while read line的问题

循环中的重定向或许你应该在其他脚本中见过下面的这种写法&#xff1a;while read linedo…done < file刚开始看到这种结构时&#xff0c;很难理解< file是如何与循环配合在一起工作的。因为循环内有很多条命令&#xff0c;而我们之前接触的重定向都是为一条命令工作的。…

Linemod;理解

Linemod 代码笔记 2019年03月11日 16:18:30 haithink 阅读数&#xff1a;197 最近了解到 Linemod 这个模板匹配算法&#xff0c;印象不错 准备仔细学习一下&#xff0c;先做点代码笔记&#xff0c;免得后面不好回顾 目前的笔记基本上把 核心流程都分析得比较清楚了&#xff0…

Swift3中数组创建方法

转载自&#xff1a;http://blog.csdn.net/bwf_erg/article/details/70858865 数组是由一组类型相同的元素构成的有序数据集合。数组中的集合元素是有 序的&#xff0c;而且可以重复出现。 1 数组创建 在Swift语言中&#xff0c;数组的类型格式为&#xff1a; Array<ElementT…

BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)

题意 这一天&#xff0c;\(\mathrm{Konano}\) 接到了一个任务&#xff0c;他需要给正在制作中的游戏 \(\mathrm{《IIIDX》}\) 安排曲目 的解锁顺序。游戏内共有\(n\) 首曲目&#xff0c;每首曲目都会有一个难度 \(d\) &#xff0c;游戏内第 \(i\) 首曲目会在玩家 Pass 第 \(\lf…

手眼标定

Eye-in-hand和Eye-to-hand问题求解和实验 2018年12月07日 00:00:40 百川木易 阅读数 3018 2018/12/5 By Yang Yang&#xff08;yangyangipp.ac.cn&#xff09; 本文所有源码和仿真场景文件全部公开&#xff0c;点击Gitee仓库链接。 文章目录 问题描述Eye-in-hand问题求解公式…

RNN总结

RNN既可以表述为循环神 经网络&#xff08;recurrent neural network&#xff09;&#xff0c;也可以表述为递归神经网络&#xff08;recursive neural network&#xff09;&#xff0c;前者一般用于处理以时间序列为输入的问题&#xff08;比如把一个句子看成词组成的序列&…

Problem 2. number题解

number&#xff1a;数学二分图匹配 首先&#xff0c;如果S<N,那么S1&#xff0c;S2...N这些数直接放在S1,S2...N的位置上(如果其他数x放在这些位置上面&#xff0c;这些数不放在对应位置&#xff0c;那么x一定能放在这些数放的位置&#xff0c;所以直接交换即可)所以可以直接…

SSD列子

一、介绍 本博文主要介绍实现通过SSD物体检测方式实现工件裂纹检测。裂纹图像如下所示&#xff1a; 二、关于SSD算法 具体算法不再阐述&#xff0c;详细请参考&#xff1a; https://blog.csdn.net/u013989576/article/details/73439202 https://blog.csdn.net/xiaohu2022/arti…

linux硬链接与软链接

Linux 系统中有软链接和硬链接两种特殊的“文件”。 软链接可以看作是Windows中的快捷方式&#xff0c;可以让你快速链接到目标档案或目录。 硬链接则透过文件系统的inode来产生新档名&#xff0c;而不是产生新档案。 创建方法都很简单&#xff1a; 软链接&#xff08;符号链接…

int转时间

int转时间 public static string FormatDuration(int duration) { if (duration 0) return "00:00:00"; int hours duration / 3600; int minutes duration % 3600 / 60; int seconds duration % 3600 % 60; string _hours hours.ToString("00") &qu…

企业级区块链现状研究报告:小企业的投资总额是大企业的28倍

根据企业级区块链现状研究报告表明&#xff0c;当前企业采用区块链技术的势头正在逐步增强。参与该报告的企业表示&#xff0c;区块链投资今年共增长了 62% &#xff0c;预计到 2025 年区块链将成为主流技术。其中&#xff0c;有 28% 的企业正在积极开展区块链发展计划。现在看…

特征匹配

Python 使用Opencv实现图像特征检测与匹配 2018-06-13 11:36:58 Xy-Huang 阅读数 19203更多 分类专栏&#xff1a; Python 人工智能 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接…

bzoj 1015 并查集

代码&#xff1a; //这题可以反着想&#xff0c;把要去掉的点倒着处理变成往图中一个一个的加点&#xff0c;然后用并查集处理联通快就好了。 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; const in…

页面中切换echarts主题

要做的效果是&#xff1a;点击下拉框切换echarts主题 下面是效果图&#xff1a; 项目环境&#xff1a; vue ts es6 echarts(4.2.1) 步骤 安装依赖&#xff0c; npm install echarts -S / yarn add echarts -S引入主题 参考链接选择下拉框中的主题时&#xff0c;拿到图表主题…

画极线

OpenCV学习日记5 2017-05-27 10:44:35 1000sprites 阅读数 2339更多 分类专栏&#xff1a; 计算机视觉 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.cs…

Win10开启Administrator超级管理员账户

方法1 1、在系统的开始菜单上&#xff0c;我们单击鼠标右键&#xff0c;然后选择计算机管理打开进入 2、打开的计算机管理窗口&#xff0c;点击本地用户和组中的用户打开&#xff0c;然后点击右侧的Administrator账户&#xff0c;双击鼠标打开进入 3、打开的属性窗口中&#xf…

Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启

中午刚想趴一会&#xff0c;不料锅从天降&#xff01;&#xff01;&#xff01;Mysql连不上了。。。。。。。 现象如下&#xff1a; 现象1&#xff1a;登录mysql所在服务器&#xff0c;连接MySQL 成功&#xff1b; 现象2&#xff1a;通过客户端远程连接MySQL&#xff0c;返回失…

最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这

优化一览图 优化 笔者将优化分为了两大类&#xff1a;软优化和硬优化。软优化一般是操作数据库即可&#xff1b;而硬优化则是操作服务器硬件及参数设置。 1、软优化 1&#xff09;查询语句优化 首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息。 例…

【读书笔记】《深入浅出Webpack》

Webpack版本 分析版本为3.6.0 4.0为最近升级的版本&#xff0c;与之前版本变化较大&#xff0c;编译输出的文件与3.0版本会不一致&#xff0c;目前项目中使用的版本3.0版本&#xff0c;所以基于3.0版本进行分析学习。 Webpack构建流程 初始化&#xff1a;启动构建&#xff0c;读…

《JAVA与模式》之桥梁模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述桥梁&#xff08;Bridge&#xff09;模式的&#xff1a; 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦&#xff0…