第 1 章:项目概述
学习目标
- 了解 TaskFlow RBAC 权限管理系统的定位
- 掌握项目技术栈与模块划分
- 明确 RBAC 权限模型的核心概念
一、项目定位
TaskFlow 是一套前后端分离的企业级 RBAC 权限管理系统。它不是玩具 demo,而是把之前章节学过的 Spring Boot、MyBatis Plus、JWT、Vue 3 等技术整合成一个可上线的真实项目。
核心特性:
- 基于角色的访问控制(Role-Based Access Control)
- 用户、角色、菜单、部门、字典统一管理
- 按钮级 + 路径级 + 数据级三层权限
- 双 Token 自动续签 + Refresh 轮换
⚠️ 坑 1:RBAC 不是"用户直接绑权限",而是"用户 → 角色 → 权限"三层。直接绑权限会导致维护灾难(100 个用户就得配 100 次)。
二、技术栈
xml
<!-- pom.xml 核心依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
<properties>
<java.version>17</java.version>
<mybatis-plus.version>3.5.5</mybatis-plus.version>
<jjwt.version>0.12.5</jjwt.version>
<hutool.version>5.8.25</hutool.version>
</properties>| 层 | 技术 | 说明 |
|---|---|---|
| 后端 | Spring Boot 3.2 + JDK 17 | 主框架 |
| ORM | MyBatis-Plus 3.5 | 单表 CRUD 简化 |
| 数据库 | MySQL 8.0 | 主流关系型数据库 |
| 缓存 | Redis 7 | 分布式缓存 |
| 认证 | JJWT + Spring Security | 双 Token |
| 前端 | Vue 3 + Element Plus | 后台 UI |
| 部署 | Docker + Docker Compose | 容器化 |
三、模块划分
taskflow/ # 项目根目录
├── taskflow-common/ # 通用工具模块
│ ├── exception/ # 异常体系
│ ├── api/ # 统一响应
│ └── utils/ # 工具类
├── taskflow-system/ # 系统业务模块
│ ├── controller/ # 控制器
│ ├── service/ # 业务层
│ ├── mapper/ # 数据访问层
│ └── entity/ # 实体类
└── taskflow-application/ # 启动模块
└── src/main/java/
└── TaskflowApplication.java多模块好处:
common不依赖任何业务,可单独复用system业务逻辑集中管理application只负责启动和装配
⚠️ 坑 2:很多同学把通用类全堆在启动模块,导致其他模块想复用就得循环依赖。多模块项目必须严格按依赖方向:common ← system ← application。
四、RBAC 模型
java
// 用户表
sys_user (id, username, password, status, dept_id)
// 角色表
sys_role (id, name, code, data_scope)
// 菜单/权限表
sys_menu (id, parent_id, name, type, permission)
// 三张关系表(中间表)
sys_user_role (user_id, role_id)
sys_role_menu (role_id, menu_id)
sys_role_dept (role_id, dept_id)权限模型分三层:
- 菜单权限:用户能看到哪些菜单(
type=2的菜单) - 按钮权限:用户能点哪些按钮(
type=3且有permission字段) - 数据权限:用户能看哪些范围的数据(
role.data_scope,1-5 级)
java
public class Menu {
private Long id;
private Long parentId;
private String name;
private Integer type; // 1=目录 2=菜单 3=按钮
private String permission; // 按钮才有,如 "user:create"
}五、核心业务流程
5.1 登录流程
java
@PostMapping("/login")
public Result<LoginVO> login(@RequestBody LoginDTO dto) {
// 1. 校验用户名密码
Authentication auth = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(dto.getUsername(), dto.getPassword()));
// 2. 生成双 Token
String access = jwtUtil.generateAccess(userId, username, roles); // 2 小时
String refresh = jwtUtil.generateRefresh(userId); // 30 天
// 3. 返回
return Result.ok(new LoginVO(access, refresh, 7200L, userVO));
}5.2 权限校验
java
@RequiresPermission("user:create")
@PostMapping
public Result<Long> create(@RequestBody UserCreateDTO dto) {
return Result.ok(userService.createUser(dto));
}注解工作原理:@RequiresPermission("user:create") → Spring AOP 拦截 → 查询当前用户权限列表 → 判断是否包含 user:create → 包含放行,缺一抛 403。
⚠️ 坑 3:权限校验必须在服务端做,前端隐藏按钮只是 UX 优化。黑客绕开前端就能乱调接口,等于没有权限控制。
六、本章小结
| 要点 | 关键 |
|---|---|
| 项目类型 | 前后端分离 RBAC 权限系统 |
| 技术栈 | Spring Boot 3 + MyBatis Plus + Vue 3 |
| 模块结构 | common / system / application 三模块 |
| RBAC 模型 | 用户 → 角色 → 权限三层 |
| 权限粒度 | 菜单级 + 按钮级 + 数据级 |
| Token 机制 | 双 Token,Access 2h + Refresh 30d |
动手练习
- 理解 RBAC:画一张 ER 图,描述用户、角色、菜单的关系
- 环境准备:本地装好 JDK 17、Maven 3.9、Node 20、Docker
- 克隆模板:在 IDEA 里创建一个空 Maven 多模块项目,目录结构按本章要求
下一章:第 2 章:需求分析 →