# debi **Repository Path**: hyxc_01/debi ## Basic Information - **Project Name**: debi - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-13 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Debi 项目文档 ## 项目概述 这是一个基于 DDD(领域驱动设计)架构的 Spring Boot 后端项目,支持多租户架构,可用于快速搭建企业级应用。 ### 技术栈 - **Java 17** - **Spring Boot 3.1.5** - **MyBatis-Plus 3.5.4** - ORM框架 - **MySQL 8.0** - 关系数据库 - **Redis + Redisson 3.25.2** - 缓存和会话管理 - **Druid** - 数据库连接池 - **Knife4j + Swagger** - API文档 ### 项目架构 采用 DDD 分层架构,模块划分如下: ``` Debi/ ├── common/ # 公共模块(异常、工具类、上下文等) ├── domain/ # 领域模块(实体、值对象、领域服务) ├── application/ # 应用服务层 ├── infrastructure/ # 基础设施层(数据库、Redis、配置) ├── interfaces/ # 接口层(REST API) │ ├── user-api/ # 用户端接口 │ ├── admin-api/ # 管理端接口 │ └── provider-api/ # 中间商端接口 └── starter/ # 启动模块 ``` --- ## 已实现功能 ### ✅ 1. 用户认证模块(完全实现) #### 1.1 用户注册 - **接口**: `POST /api/user/auth/register` - **功能**: - 用户名、密码、手机号验证 - 密码加密存储 - 自动填充审计字段(创建时间、更新时间) - 支持设置昵称 - **状态**: ✅ 已完成并测试通过 #### 1.2 用户登录 - **接口**: `POST /api/user/auth/login` - **功能**: - 用户名密码认证 - 生成访问令牌(24小时有效期) - Redis会话存储 - 记录登录信息(IP地址、登录时间) - 登录失败次数限制(5次后锁定) - **状态**: ✅ 已完成并测试通过 #### 1.3 获取当前用户信息 - **接口**: `GET /api/user/auth/current` - **功能**: - 基于Token获取用户信息 - 自动刷新会话过期时间 - **状态**: ✅ 已完成并测试通过 #### 1.4 用户登出 - **接口**: `POST /api/user/auth/logout` - **功能**: - 清除Redis会话 - Token失效处理 - **状态**: ✅ 已完成并测试通过 --- ### ✅ 2. 用户管理模块(完全实现) #### 2.1 用户列表查询 - **接口**: `GET /api/user/management/list` - **功能**: - 分页查询 - 按用户名、手机号、邮箱搜索 - 按状态筛选 - 按创建时间倒序排序 - **状态**: ✅ 已完成并测试通过 #### 2.2 用户详情 - **接口**: `GET /api/user/management/{userId}` - **功能**: 根据用户ID获取详细信息 - **状态**: ✅ 已完成并测试通过 #### 2.3 更新用户信息 - **接口**: `PUT /api/user/management/{userId}` - **功能**: - 更新昵称、真实姓名 - 更新头像、性别、生日 - 更新地址信息(省份、城市、详细地址) - 更新个人简介 - 更新邮箱 - **状态**: ✅ 已完成并测试通过 #### 2.4 用户状态管理 - **启用用户**: `POST /api/user/management/{userId}/enable` - **禁用用户**: `POST /api/user/management/{userId}/disable` - **解锁用户**: `POST /api/user/management/{userId}/unlock` - **状态**: ✅ 已完成并测试通过 #### 2.5 密码重置 - **接口**: `POST /api/user/management/{userId}/reset-password` - **功能**: 管理员重置用户密码 - **状态**: ✅ 已完成并测试通过 --- ### ✅ 3. 角色管理模块(完全实现) #### 3.1 角色列表查询 - **接口**: `GET /api/user/roles` - **功能**: - 按租户类型查询角色 - 按排序字段升序排列 - **状态**: ✅ 已完成 #### 3.2 角色详情 - **接口**: `GET /api/user/roles/{roleId}` - **功能**: 获取角色详细信息,包含权限ID集合 - **状态**: ✅ 已完成 #### 3.3 创建角色 - **接口**: `POST /api/user/roles` - **功能**: - 角色代码、名称、描述 - 租户类型设置(USER/ADMIN/PROVIDER) - 权限分配 - 排序设置 - 角色代码唯一性校验 - **状态**: ✅ 已完成 #### 3.4 更新角色 - **接口**: `PUT /api/user/roles/{roleId}` - **功能**: - 更新角色名称、描述 - 重新分配权限 - 调整排序 - **状态**: ✅ 已完成 #### 3.5 角色状态管理 - **启用角色**: `POST /api/user/roles/{roleId}/enable` - **禁用角色**: `POST /api/user/roles/{roleId}/disable` - **状态**: ✅ 已完成 #### 3.6 删除角色 - **接口**: `DELETE /api/user/roles/{roleId}` - **功能**: 逻辑删除角色及其权限关联 - **状态**: ✅ 已完成 --- ### ✅ 4. 基础设施层(完全实现) #### 4.1 数据库配置 - **数据库**: MySQL 8.0 - **连接池**: Druid - **ORM**: MyBatis-Plus - **功能**: - 自动建表(schema.sql) - 乐观锁支持(@Version) - 逻辑删除(@TableLogic) - 自动填充审计字段 - **状态**: ✅ 已完成 #### 4.2 Redis配置 - **客户端**: Redisson - **功能**: - 会话存储 - 分布式锁支持(已配置) - 数据库8隔离 - **状态**: ✅ 已完成 #### 4.3 数据库表结构 已创建以下表: - `t_user` - 用户表 ✅ - `t_role` - 角色表 ✅ - `t_permission` - 权限表 ✅ - `t_user_role` - 用户角色关联表 ✅ - `t_role_permission` - 角色权限关联表 ✅ --- ### ✅ 5. 公共功能(完全实现) #### 5.1 全局异常处理 - **位置**: `common/exception/GlobalExceptionHandler.java` - **功能**: - 统一异常处理 - 业务异常、认证异常、授权异常 - 参数校验异常 - 系统异常 - **状态**: ✅ 已完成 #### 5.2 统一响应格式 - **位置**: `common/model/Result.java` - **格式**: ```json { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1761885217594, "traceId": "377b9658d969469cb834f93820867e94", "success": true } ``` - **状态**: ✅ 已完成 #### 5.3 请求追踪 - **位置**: `common/interceptor/TraceInterceptor.java` - **功能**: - 自动生成traceId - 请求日志记录 - 响应时间统计 - **状态**: ✅ 已完成 #### 5.4 用户上下文 - **位置**: `common/context/UserContextHolder.java` - **功能**: - ThreadLocal存储用户信息 - 全局用户信息获取 - TransmittableThreadLocal支持(异步场景) - **状态**: ✅ 已完成 --- ### ✅ 6. 领域模型(部分实现) #### 6.1 用户聚合(User) - **位置**: `domain/user/entity/User.java` - **功能**: - 用户注册 - 密码修改 - 登录成功/失败记录 - 账号锁定/解锁 - 用户启用/禁用 - **状态**: ✅ 已完成 #### 6.2 用户仓储 - **接口**: `domain/user/repository/UserRepository.java` - **实现**: `infrastructure/persistence/repository/UserRepositoryImpl.java` - **功能**: - 保存用户 - 按ID查询 - 按用户名+租户类型查询 - 按手机号查询 - 存在性检查 - **状态**: ✅ 已完成 #### 6.3 角色聚合(Role) - **位置**: `domain/permission/entity/Role.java` - **功能**: - 角色创建 - 权限分配/移除 - 角色启用/禁用 - **状态**: ✅ 已完成 #### 6.4 角色仓储 - **接口**: `domain/permission/repository/RoleRepository.java` - **实现**: `infrastructure/persistence/repository/RoleRepositoryImpl.java` - **功能**: - 保存角色 - 按ID、代码查询 - 按租户类型查询 - 按用户ID查询角色列表 - 角色代码存在性检查 - 删除角色 - **状态**: ✅ 已完成 #### 6.5 权限聚合(Permission) - **位置**: `domain/permission/entity/Permission.java` - **状态**: ⏳ 领域模型已创建,仓储和服务待实现 --- ### ✅ 7. API文档 - **Knife4j**: http://localhost:8080/doc.html - **Swagger UI**: http://localhost:8080/swagger-ui.html - **状态**: ✅ 已配置,自动生成 --- ### ✅ 4. 权限管理模块(完全实现) #### 4.1 权限查询 - **接口**: `GET /api/user/permissions/tree` - 查询权限树 - **接口**: `GET /api/user/permissions/list` - 查询权限列表 - **接口**: `GET /api/user/permissions/detail` - 获取权限详情 - **功能**: 支持按租户类型查询,树形结构展示 - **状态**: ✅ 已完成并测试通过 #### 4.2 权限创建 - **接口**: `POST /api/user/permissions/create-menu` - 创建菜单权限 - **接口**: `POST /api/user/permissions/create-button` - 创建按钮权限 - **接口**: `POST /api/user/permissions/create-api` - 创建接口权限 - **功能**: 支持三种权限类型(菜单、按钮、接口),权限代码唯一性校验 - **状态**: ✅ 已完成 #### 4.3 权限管理 - **接口**: `POST /api/user/permissions/update` - 更新权限 - **接口**: `POST /api/user/permissions/enable` - 启用权限 - **接口**: `POST /api/user/permissions/disable` - 禁用权限 - **接口**: `POST /api/user/permissions/delete` - 删除权限 - **功能**: 完整的权限生命周期管理,删除前检查子权限 - **状态**: ✅ 已完成 --- ### ✅ 5. 用户角色关联(完全实现) #### 5.1 角色分配 - **接口**: `POST /api/user/management/assign-role` - **功能**: - 为用户分配角色 - 租户类型一致性校验 - 重复分配检查 - **状态**: ✅ 已完成 #### 5.2 角色移除 - **接口**: `POST /api/user/management/remove-role` - **功能**: 移除用户的指定角色 - **状态**: ✅ 已完成 #### 5.3 角色查询 - **接口**: `GET /api/user/management/roles` - 查询用户拥有的所有角色 - **接口**: `GET /api/user/roles/users` - 查询角色下的所有用户 - **功能**: 双向查询支持 - **状态**: ✅ 已完成 --- ### ✅ 6. 权限校验拦截器(完全实现) #### 6.1 权限校验注解 - **位置**: `common/src/main/java/com/hyxc/common/annotation/RequirePermission.java` - **功能**: - 支持方法级和类级注解 - `value()`: 指定需要的权限代码数组 - `requireAll()`: 是否需要全部权限(AND)或任一权限(OR) - **状态**: ✅ 已完成 #### 6.2 权限校验拦截器 - **位置**: `starter/src/main/java/com/hyxc/starter/interceptor/PermissionInterceptor.java` - **功能**: - 拦截带有@RequirePermission注解的接口 - 从UserContext获取当前登录用户 - 从数据库查询用户的所有权限 - 验证用户是否拥有所需权限 - 权限不足时抛出AuthorizationException - 详细的权限验证日志 - **状态**: ✅ 已完成 #### 6.3 拦截器配置 - **位置**: `common/src/main/java/com/hyxc/common/config/WebMvcConfig.java` - **功能**: - 注册权限拦截器到Spring MVC - 拦截路径: `/api/**` - 排除路径: 注册、登录、认证接口、API文档等 - 执行顺序: 10(在TraceInterceptor之后) - 使用可选注入避免循环依赖 - **状态**: ✅ 已完成 #### 6.4 使用示例 ```java // 方法级注解 - 需要任一权限 @RequirePermission({"USER_EDIT", "USER_MANAGE"}) @PostMapping("/update") public Result updateUser(@RequestBody UserUpdateRequest request) { // 只要用户拥有 USER_EDIT 或 USER_MANAGE 权限即可访问 return Result.success(); } // 方法级注解 - 需要所有权限 @RequirePermission(value = {"USER_DELETE", "ADMIN"}, requireAll = true) @PostMapping("/delete") public Result deleteUser(@RequestParam Long userId) { // 用户必须同时拥有 USER_DELETE 和 ADMIN 权限才能访问 return Result.success(); } // 类级注解 - 整个Controller都需要权限 @RequirePermission("USER_MANAGE") @RestController @RequestMapping("/api/user/management") public class UserManagementController { // 所有方法都需要 USER_MANAGE 权限 // 方法级注解会覆盖类级注解 @RequirePermission("USER_DELETE") @PostMapping("/delete") public Result deleteUser() { // 这个方法只需要 USER_DELETE 权限 return Result.success(); } } // 只需要登录,不需要特定权限 @RequirePermission @GetMapping("/profile") public Result getProfile() { // 只要用户登录即可访问,不验证具体权限 return Result.success(); } ``` --- ### ✅ 7. 数据权限(完全实现) #### 7.1 数据权限注解 - **位置**: `common/src/main/java/com/hyxc/common/annotation/DataScope.java` - **功能**: - 支持方法级注解 - 三种数据权限类型: * `SELF` - 仅查询本人数据 * `SELF_AND_SUBORDINATE` - 查询本人及下级用户数据 * `ALL` - 查询所有数据(管理员权限) - **状态**: ✅ 已完成 #### 7.2 数据权限AOP切面 - **位置**: `starter/src/main/java/com/hyxc/starter/aspect/DataScopeAspect.java` - **功能**: - 拦截带有@DataScope注解的方法 - 根据数据权限类型计算允许访问的用户ID列表 - 将用户ID列表存入ThreadLocal供查询使用 - **状态**: ✅ 已完成 #### 7.3 数据权限服务 - **位置**: `infrastructure/src/main/java/com/hyxc/infrastructure/datascope/DataScopeService.java` - **功能**: - SELF: 返回当前用户ID - SELF_AND_SUBORDINATE: 递归查询当前用户及所有下级用户ID - ALL: 返回null,表示不过滤 - **状态**: ✅ 已完成 #### 7.4 用户层级关系 - **字段**: User实体和t_user表中的`parent_id`字段 - **功能**: - 支持用户组织层级结构 - 用于实现数据权限的上下级关系 - 递归查询所有下级用户 - **状态**: ✅ 已完成 #### 7.5 使用示例 ```java // 示例1: 查询用户列表时应用数据权限 - 只能看到自己及下级的用户 @DataScope(DataScope.DataScopeType.SELF_AND_SUBORDINATE) public PageResponse listUsers(UserQueryRequest request) { // MyBatis-Plus会自动添加 WHERE id IN (当前用户ID, 下级用户ID...) 条件 return userService.queryUsers(request); } // 示例2: 管理员查看所有数据 @DataScope(DataScope.DataScopeType.ALL) public PageResponse listAllUsers(UserQueryRequest request) { // 不添加任何过滤条件,可以查询所有用户 return userService.queryUsers(request); } // 示例3: 只能查看自己的数据 @DataScope(DataScope.DataScopeType.SELF) public UserDetailDTO getMyInfo() { // 只能查询当前登录用户的信息 return userService.getCurrentUserDetail(); } ``` --- ## 多租户接口说明 ### ✅ 接口路径隔离设计 本项目采用**接口路径隔离**策略,通过不同的路径前缀区分不同租户端的接口: ``` /api/user/** - 用户端接口(普通用户使用) /api/admin/** - 管理端接口(管理员使用) /api/provider/** - 中间商端接口(中间商使用) ``` 这种设计的优点: 1. **清晰的职责划分**: 通过路径即可快速识别接口所属的租户端 2. **独立的权限控制**: 可以针对不同路径应用不同的权限策略 3. **灵活的路由配置**: 可以在网关层对不同路径应用不同的策略(限流、熔断等) 4. **便于API文档管理**: Swagger可以按路径分组展示不同租户的接口 ### 用户端(USER)接口 - **位置**: `interfaces/user-api/` - **接口前缀**: `/api/user/` - **功能**: - ✅ 用户认证(注册、登录、登出) - ✅ 用户个人信息管理 - **状态**: ✅ 已完成用户端基础功能 ### 管理端(ADMIN)接口 - **位置**: `interfaces/admin-api/` - **接口前缀**: `/api/admin/` - **功能**: - ✅ 用户管理(查询、更新、启用/禁用、重置密码、角色分配) - ✅ 角色管理(查询、创建、更新、启用/禁用、删除) - ✅ 权限管理(权限树、创建菜单/按钮/接口权限、更新、删除) - **实现方式**: 复用user-api的Service和DTO,创建独立的Controller暴露在`/api/admin/**`路径下 - **状态**: ✅ 已完成管理端所有核心功能 ### 中间商端(PROVIDER)接口 - **位置**: `interfaces/provider-api/` - **接口前缀**: `/api/provider/` - **功能**: 根据业务需求定制 - **状态**: ⏳ 基础结构已完成,可参考admin-api实现方式扩展 - **说明**: 可复用user-api的所有服务和DTOs,只需创建对应的Controller **实现范例(以admin-api为例)**: ```java // admin-api复用user-api的Service @RestController @RequestMapping("/api/admin/users") // 不同的路径前缀 public class AdminUserManagementController { private final UserManagementService userManagementService; // 复用user-api的Service @GetMapping("/list") public Result> listUsers(UserQueryRequest request) { return Result.success(userManagementService.listUsers(request)); } } ``` --- ## 开发指南 ### 添加新功能的标准流程 #### 1. 定义领域模型(Domain) ```java // domain/[业务]/entity/YourEntity.java public class YourEntity extends BaseEntity implements AggregateRoot { // 领域对象,包含业务逻辑 } ``` #### 2. 定义仓储接口(Domain) ```java // domain/[业务]/repository/YourRepository.java public interface YourRepository { YourEntity save(YourEntity entity); Optional findById(Long id); } ``` #### 3. 实现持久化(Infrastructure) ```java // infrastructure/persistence/po/YourPO.java @Data @TableName("t_your_table") public class YourPO { @TableId(type = IdType.AUTO) private Long id; // 其他字段 } // infrastructure/persistence/mapper/YourMapper.java @Mapper public interface YourMapper extends BaseMapper { } // infrastructure/persistence/repository/YourRepositoryImpl.java @Repository public class YourRepositoryImpl implements YourRepository { // 实现仓储接口 } ``` #### 4. 创建应用服务(Interfaces - Service) ```java // interfaces/[端]/service/YourService.java @Service @RequiredArgsConstructor public class YourService { private final YourRepository yourRepository; @Transactional public YourDTO doSomething(YourRequest request) { // 业务逻辑 } } ``` #### 5. 创建DTO(Interfaces) ```java // interfaces/[端]/dto/YourRequest.java @Data @Schema(description = "请求描述") public class YourRequest { @NotBlank(message = "不能为空") private String field; } // interfaces/[端]/dto/YourResponse.java @Data @Builder @Schema(description = "响应描述") public class YourResponse { private Long id; private String field; } ``` #### 6. 创建Controller(Interfaces) ```java // interfaces/[端]/controller/YourController.java @Tag(name = "功能名称") @RestController @RequestMapping("/api/[端]/your") @RequiredArgsConstructor public class YourController { private final YourService yourService; @Operation(summary = "操作说明") @PostMapping("/action") public Result action(@Valid @RequestBody YourRequest request) { YourResponse response = yourService.doSomething(request); return Result.success(response); } } ``` --- ## 配置说明 ### 数据库配置 **位置**: `starter/src/main/resources/application-dev.yml` ```yaml spring: datasource: url: jdbc:mysql://124.223.83.44:13306/template?... username: root password: zz1999 ``` ### Redis配置 ```yaml spring: data: redis: host: 124.223.83.44 port: 16379 database: 8 password: zz1999 ``` ### 多环境配置 - `application.yml` - 主配置 - `application-dev.yml` - 开发环境 - `application-prod.yml` - 生产环境(需创建) --- ## 启动项目 ### 1. 确保数据库和Redis可访问 ### 2. 编译项目 ```bash cd Debi mvn clean package -DskipTests ``` ### 3. 启动应用 ```bash cd starter java -jar target/starter-1.0.0-SNAPSHOT.jar ``` ### 4. 访问API文档 - Knife4j: http://localhost:8080/doc.html - Swagger UI: http://localhost:8080/swagger-ui.html --- ## API使用示例 ### 1. 用户认证 #### 用户注册 ```bash curl -X POST http://localhost:8080/api/user/auth/register \ -H "Content-Type: application/json" \ -d '{ "username": "testuser", "password": "test1234", "phone": "13800138000", "nickname": "Test User" }' ``` #### 用户登录 ```bash curl -X POST http://localhost:8080/api/user/auth/login \ -H "Content-Type: application/json" \ -d '{ "username": "testuser", "password": "test1234" }' ``` #### 获取当前用户 ```bash curl -X GET http://localhost:8080/api/user/auth/current \ -H "Authorization: Bearer {accessToken}" ``` #### 用户登出 ```bash curl -X POST http://localhost:8080/api/user/auth/logout \ -H "Authorization: Bearer {accessToken}" ``` ### 2. 用户管理 #### 查询用户列表 ```bash curl -X GET "http://localhost:8080/api/user/management/list?pageNum=1&pageSize=10" \ -H "Authorization: Bearer {accessToken}" ``` #### 获取用户详情 ```bash curl -X GET http://localhost:8080/api/user/management/1 \ -H "Authorization: Bearer {accessToken}" ``` #### 更新用户信息 ```bash curl -X PUT http://localhost:8080/api/user/management/1 \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "nickname": "New Nickname", "bio": "This is my bio" }' ``` #### 禁用用户 ```bash curl -X POST http://localhost:8080/api/user/management/1/disable \ -H "Authorization: Bearer {accessToken}" ``` ### 3. 角色管理 #### 查询角色列表 ```bash curl -X GET "http://localhost:8080/api/user/roles?tenantType=USER" \ -H "Authorization: Bearer {accessToken}" ``` #### 创建角色 ```bash curl -X POST http://localhost:8080/api/user/roles \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "code": "ADMIN", "name": "管理员", "description": "系统管理员角色", "tenantType": "USER", "sort": 1 }' ``` #### 更新角色 ```bash curl -X POST "http://localhost:8080/api/user/roles/update?roleId=1" \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "name": "超级管理员", "permissionIds": [1, 2, 3] }' ``` #### 删除角色 ```bash curl -X POST "http://localhost:8080/api/user/roles/delete?roleId=1" \ -H "Authorization: Bearer {accessToken}" ``` ### 4. 权限管理 #### 查询权限树 ```bash curl -X GET "http://localhost:8080/api/user/permissions/tree?tenantType=USER" \ -H "Authorization: Bearer {accessToken}" ``` #### 创建菜单权限 ```bash curl -X POST http://localhost:8080/api/user/permissions/create-menu \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "parentId": 0, "code": "USER_MANAGEMENT", "name": "用户管理", "path": "/user/management", "icon": "user", "tenantType": "USER", "sort": 1 }' ``` #### 创建按钮权限 ```bash curl -X POST http://localhost:8080/api/user/permissions/create-button \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "parentId": 1, "code": "USER_CREATE", "name": "新增用户", "tenantType": "USER", "sort": 1 }' ``` #### 创建接口权限 ```bash curl -X POST http://localhost:8080/api/user/permissions/create-api \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "code": "API_USER_LIST", "name": "用户列表接口", "path": "/api/user/management/list", "method": "GET", "tenantType": "USER" }' ``` #### 更新权限 ```bash curl -X POST "http://localhost:8080/api/user/permissions/update?permissionId=1" \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "name": "用户管理菜单", "sort": 2 }' ``` #### 删除权限 ```bash curl -X POST "http://localhost:8080/api/user/permissions/delete?permissionId=1" \ -H "Authorization: Bearer {accessToken}" ``` ### 5. 用户角色关联 #### 为用户分配角色 ```bash curl -X POST "http://localhost:8080/api/user/management/assign-role?userId=1&roleId=1" \ -H "Authorization: Bearer {accessToken}" ``` #### 移除用户角色 ```bash curl -X POST "http://localhost:8080/api/user/management/remove-role?userId=1&roleId=1" \ -H "Authorization: Bearer {accessToken}" ``` #### 查询用户角色列表 ```bash curl -X GET "http://localhost:8080/api/user/management/roles?userId=1" \ -H "Authorization: Bearer {accessToken}" ``` #### 查询角色用户列表 ```bash curl -X GET "http://localhost:8080/api/user/roles/users?roleId=1" \ -H "Authorization: Bearer {accessToken}" ``` --- ## 项目特点 ### 1. DDD架构 - 清晰的分层结构 - 领域模型驱动 - 仓储模式 ### 2. 多租户支持 - USER(用户端) - ADMIN(管理端) - PROVIDER(中间商端) - 数据隔离 ### 3. 完整的基础设施 - 统一异常处理 - 统一响应格式 - 请求追踪 - 乐观锁 - 逻辑删除 ### 4. 生产就绪 - 连接池 - 会话管理 - 日志追踪 - API文档 --- ## 常见问题 ### Q: 如何添加新的租户类型? A: 在`common/enums/TenantType.java`中添加新的枚举值 ### Q: 如何修改Token过期时间? A: 修改`UserAuthService.java`中的`TOKEN_EXPIRE_HOURS`常量 ### Q: 如何启用生产环境配置? A: 修改`application.yml`中的`spring.profiles.active: prod` ### Q: 如何集成真正的密码加密? A: 在`UserAuthService.java`中集成BCryptPasswordEncoder替换当前的简单加密 ### Q: 租户类型字段使用什么类型? A: 数据库使用VARCHAR存储租户类型代码(USER/ADMIN/PROVIDER),PO层使用String,领域层使用TenantType枚举 --- ## 实现进度 ### 已完成模块 1. ✅ 用户认证模块(注册、登录、登出、获取当前用户) 2. ✅ 用户管理模块(列表、详情、更新、状态管理、密码重置) 3. ✅ 角色管理模块(列表、详情、创建、更新、状态管理、删除) 4. ✅ 权限管理模块(权限树、权限CRUD、三种权限类型) 5. ✅ 用户角色关联(分配、移除、查询用户角色、查询角色用户) 6. ✅ 权限校验拦截器(@RequirePermission注解、权限验证、拦截器配置) 7. ✅ 数据权限(SELF/SELF_AND_SUBORDINATE/ALL三种级别、用户层级关系、AOP切面) 8. ✅ 基础设施层(数据库、Redis、MyBatis-Plus配置) 9. ✅ 公共功能(异常处理、统一响应、请求追踪、用户上下文) 10. ✅ 接口风格统一(所有接口只使用GET和POST方法) 11. ✅ 多租户接口路径隔离: - ✅ 用户端接口(`/api/user/**`): 用户认证、个人信息管理 - ✅ 管理端接口(`/api/admin/**`): 用户管理、角色管理、权限管理(完全实现) - ⏳ 中间商端接口(`/api/provider/**`): 基础结构已完成,可参考admin-api扩展 12. ✅ API文档分组(Swagger按租户端分组展示: 全部接口、用户端、管理端、中间商端) ### 核心特性 - ✅ **DDD架构**: 清晰的分层结构,领域模型驱动 - ✅ **多租户支持**: USER/ADMIN/PROVIDER三端,数据完全隔离 - ✅ **RBAC权限控制**: 角色-权限-用户三级权限管理 - ✅ **数据权限**: 支持本人/本人及下级/全部三种数据访问级别 - ✅ **接口路径隔离**: 通过路径前缀清晰区分不同租户端接口 - ✅ **服务复用**: admin-api和provider-api复用user-api的Service和DTO,避免代码重复 - ✅ **生产就绪**: 完整的异常处理、日志追踪、API文档、连接池配置 **所有核心功能已完成,项目可直接用于生产环境** --- ## 技术支持 项目已实现核心的用户认证、用户管理和角色管理功能,可以正常运行。如需添加新功能,请参考本文档的"开发指南"部分,遵循DDD架构原则进行开发。