Skip to content
第 1 章 ⏱ 10 分钟阅读

第 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主框架
ORMMyBatis-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)

权限模型分三层:

  1. 菜单权限:用户能看到哪些菜单(type=2 的菜单)
  2. 按钮权限:用户能点哪些按钮(type=3 且有 permission 字段)
  3. 数据权限:用户能看哪些范围的数据(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

动手练习 ​

  1. 理解 RBAC:画一张 ER 图,描述用户、角色、菜单的关系
  2. 环境准备:本地装好 JDK 17、Maven 3.9、Node 20、Docker
  3. 克隆模板:在 IDEA 里创建一个空 Maven 多模块项目,目录结构按本章要求

下一章:第 2 章:需求分析 →

本站基于 VitePress 构建 · 由 StackHub 团队维护