You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

558 lines
27 KiB

1 month ago
# 领域模型与实体
<cite>
**本文引用的文件**
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
- [SysDeptMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java)
- [SysUserRoleMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java)
- [SysRoleMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
- [SysRoleMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java)
- [SysUserDeptMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java)
- [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java)
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本章节聚焦认证相关的领域模型与实体设计,围绕用户、身份标识、部门、角色与菜单等核心对象,阐述实体关系映射、枚举类型定义、数据验证规则,以及数据库表结构设计、字段含义与业务约束。文档旨在帮助开发者快速理解并正确使用这些实体,确保权限控制、数据范围与多源身份接入的一致性与可维护性。
## 项目结构
认证域位于 crm-auth 模块,基础通用能力位于 crm-base 模块。实体类集中在 domain/entity 包下,枚举在 domain/enums 包下,数据访问层在 mapper 包下,服务实现位于 service/impl 包中。基础实体 BaseEntity 与 OwnedEntity 提供公共字段与审计能力,MyBatis-Plus 配置与填充策略由 base 模块统一提供。
```mermaid
graph TB
subgraph "认证域(crm-auth)"
A["AuthUser"] --> B["AuthIdentity"]
A --> C["SysUserRole"]
C --> D["SysRole"]
D --> E["SysRoleMenu"]
E --> F["SysMenu"]
A --> G["SysUserDept"]
G --> H["SysDept"]
end
subgraph "基础域(crm-base)"
I["BaseEntity"] --> A
J["OwnedEntity"] --> A
K["CrmBaseMapper"] --> L["各Mapper接口"]
end
L --> M["MyBatis-Plus配置"]
```
图表来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
- [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java)
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
章节来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
- [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java)
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
## 核心组件
本节概述认证相关核心实体的职责与关系:
- AuthUser 用户实体:系统内用户的主体信息,关联身份标识、角色与部门。
- AuthIdentity 身份标识:支持多种登录来源(如账号密码、第三方平台),通过类型区分。
- SysDept 部门实体:组织树形结构,用于数据范围与权限隔离。
- SysUserRole 用户角色关联:多对多关系,承载用户与角色的绑定。
- SysRole 角色实体:权限集合的载体,与菜单存在多对多关系。
- SysMenu 菜单实体:功能点与资源标识,支撑菜单与按钮级权限。
- SysRoleMenu 角色菜单关联:角色与菜单的多对多中间表。
- SysUserDept 用户部门关联:用户与部门的归属关系,支撑数据可见范围。
章节来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
## 架构总览
下图展示认证域实体之间的关系与数据流向,包括用户、身份、角色、菜单与部门的关联,以及基础实体提供的公共字段与审计能力。
```mermaid
classDiagram
class BaseEntity {
+id
+createBy
+createTime
+updateBy
+updateTime
+remark
}
class OwnedEntity {
+ownerId
+ownerType
}
class AuthUser {
+username
+status
+deptIds
+roleIds
}
class AuthIdentity {
+userId
+identityType
+thirdPartyId
+credential
}
class SysDept {
+parentId
+name
+sort
+status
}
class SysUserRole {
+userId
+roleId
}
class SysRole {
+code
+name
+status
}
class SysMenu {
+parentId
+type
+path
+permission
+status
}
class SysRoleMenu {
+roleId
+menuId
}
class SysUserDept {
+userId
+deptId
}
BaseEntity <|-- AuthUser
BaseEntity <|-- SysDept
BaseEntity <|-- SysRole
BaseEntity <|-- SysMenu
OwnedEntity <|-- AuthUser
AuthUser "1" o-- "n" AuthIdentity : "一对多"
AuthUser "1" o-- "n" SysUserRole : "多对多"
SysRole "1" o-- "n" SysUserRole : "多对多"
SysRole "1" o-- "n" SysRoleMenu : "多对多"
SysMenu "1" o-- "n" SysRoleMenu : "多对多"
AuthUser "1" o-- "n" SysUserDept : "多对多"
SysDept "1" o-- "n" SysUserDept : "多对多"
```
图表来源
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
## 详细组件分析
### AuthUser 用户实体
- 职责:表示系统用户主记录,承载用户名、状态、所属部门与角色等关键信息。
- 继承关系:继承 BaseEntity 与 OwnedEntity,获得通用审计字段与数据所有者标记。
- 关联关系:
- 与 AuthIdentity 一对多:一个用户可拥有多个身份标识(如手机号、邮箱、第三方ID)。
- 与 SysUserRole 多对多:通过中间表建立用户与角色的绑定。
- 与 SysUserDept 多对多:通过中间表建立用户与部门的归属。
- 数据验证与约束:
- 用户名唯一性、非空校验。
- 状态字段受 StatusEnum 约束,仅允许有效值。
- 部门与角色通过中间表维护,避免冗余与不一致。
- 使用示例:
- 注册新用户时创建 AuthUser,并插入一条或多条 AuthIdentity。
- 分配角色与部门时写入 SysUserRole 与 SysUserDept。
- 查询用户权限时,基于角色与菜单关联计算可用权限集。
章节来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
### AuthIdentity 身份标识
- 职责:抽象不同登录来源的身份凭证,支持账号密码与第三方平台登录。
- 关键字段:
- identityType:身份类型,受 IdentityTypeEnum 约束(如账号、第三方)。
- thirdPartyId:第三方平台的唯一标识。
- credential:加密后的凭证或令牌。
- 数据验证与约束:
- 同一 userId 下 identityType 唯一,防止重复来源冲突。
- 第三方登录需校验 thirdPartyId 的唯一性。
- 使用示例:
- 第三方授权回调时,根据 identityType 与 thirdPartyId 查找或创建 AuthIdentity。
- 账号密码登录时,校验 credential 并与 AuthUser 关联。
章节来源
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
### SysDept 部门实体
- 职责:组织部门树,支撑数据范围与权限隔离。
- 关键字段:
- parentId:父部门ID,根节点为空或特定值。
- name:部门名称。
- sort:排序权重。
- status:状态受 StatusEnum 约束。
- 数据验证与约束:
- 父子层级关系自引用,禁止循环引用。
- 名称唯一性在同一父级下校验。
- 使用示例:
- 初始化部门树时按 sort 顺序构建。
- 数据范围过滤时,依据用户所属部门及其子部门生成 SQL 条件。
章节来源
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
### SysUserRole 用户角色关联
- 职责:用户与角色的多对多中间表,承载授权关系。
- 关键字段:
- userId:用户ID。
- roleId:角色ID。
- 数据验证与约束:
- (userId, roleId) 组合唯一,避免重复授权。
- 外键约束保证引用完整性。
- 使用示例:
- 为用户分配角色时批量插入 SysUserRole。
- 撤销角色时删除对应记录。
章节来源
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
### SysRole 角色实体
- 职责:权限集合的载体,描述一组可访问的资源与操作。
- 关键字段:
- code:角色编码,全局唯一。
- name:角色名称。
- status:状态受 StatusEnum 约束。
- 数据验证与约束:
- code 唯一性校验。
- 状态变更需遵循业务流程。
- 使用示例:
- 创建系统预设角色(管理员、普通用户)并分配菜单权限。
章节来源
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
### SysMenu 菜单实体
- 职责:功能点与资源标识,支撑菜单与按钮级权限。
- 关键字段:
- parentId:父菜单ID,形成树形结构。
- type:菜单类型,受 MenuTypeEnum 约束(目录、菜单、按钮)。
- path:路由路径。
- permission:权限标识。
- status:状态受 StatusEnum 约束。
- 数据验证与约束:
- 父子层级关系自引用,禁止循环引用。
- permission 唯一性校验。
- 使用示例:
- 前端根据菜单树渲染导航。
- 后端基于 permission 进行接口级鉴权。
章节来源
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
### SysRoleMenu 角色菜单关联
- 职责:角色与菜单的多对多中间表,承载菜单授权。
- 关键字段:
- roleId:角色ID。
- menuId:菜单ID。
- 数据验证与约束:
- (roleId, menuId) 组合唯一。
- 外键约束保证引用完整性。
- 使用示例:
- 为角色批量授权菜单时插入多条记录。
- 取消授权时删除对应记录。
章节来源
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
### SysUserDept 用户部门关联
- 职责:用户与部门的归属关系,支撑数据可见范围。
- 关键字段:
- userId:用户ID。
- deptId:部门ID。
- 数据验证与约束:
- (userId, deptId) 组合唯一。
- 外键约束保证引用完整性。
- 使用示例:
- 用户加入部门后插入记录。
- 数据范围过滤时,结合 DataScopeEnum 决定查询范围。
章节来源
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
### 枚举类型定义
- IdentityTypeEnum:身份类型枚举,区分账号、第三方等平台来源。
- DataScopeEnum:数据范围枚举,定义个人、本部门、本部门及子部门、全部等范围。
- MenuTypeEnum:菜单类型枚举,区分目录、菜单、按钮。
- StatusEnum:通用状态枚举,定义启用、禁用等状态。
- HasValueEnum:通用有值/无值枚举,用于布尔语义化表达。
章节来源
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
### 数据库表结构设计
以下为认证域核心表的建议结构与字段说明(以实际实体与约定为准):
- auth_user
- id: 主键
- username: 用户名(唯一)
- status: 状态(受 StatusEnum 约束)
- owner_id: 数据所有者ID
- owner_type: 数据所有者类型
- create_by/create_time/update_by/update_time/remark: 审计字段
- auth_identity
- id: 主键
- user_id: 用户ID(外键)
- identity_type: 身份类型(受 IdentityTypeEnum 约束)
- third_party_id: 第三方ID(唯一)
- credential: 凭证(加密存储)
- 审计字段同上
- sys_dept
- id: 主键
- parent_id: 父部门ID
- name: 部门名称
- sort: 排序
- status: 状态
- 审计字段同上
- sys_user_role
- id: 主键
- user_id: 用户ID(外键)
- role_id: 角色ID(外键)
- 唯一约束(user_id, role_id)
- sys_role
- id: 主键
- code: 角色编码(唯一)
- name: 角色名称
- status: 状态
- 审计字段同上
- sys_menu
- id: 主键
- parent_id: 父菜单ID
- type: 菜单类型(受 MenuTypeEnum 约束)
- path: 路由路径
- permission: 权限标识(唯一)
- status: 状态
- 审计字段同上
- sys_role_menu
- id: 主键
- role_id: 角色ID(外键)
- menu_id: 菜单ID(外键)
- 唯一约束(role_id, menu_id)
- sys_user_dept
- id: 主键
- user_id: 用户ID(外键)
- dept_id: 部门ID(外键)
- 唯一约束(user_id, dept_id)
章节来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
### 数据验证规则与业务约束
- 唯一性约束:
- 用户名、角色编码、菜单权限标识、第三方ID、(userId, identityType)、(userId, roleId)、(roleId, menuId)、(userId, deptId) 等组合唯一。
- 状态约束:
- 所有状态字段受 StatusEnum 约束,仅允许预定义值。
- 层级约束:
- 部门与菜单的父子关系禁止循环引用,需在应用层校验。
- 数据范围:
- 数据范围受 DataScopeEnum 控制,结合用户部门与角色权限生成查询条件。
- 审计字段:
- 通过 MetaObjectFillHandler 自动填充创建与更新时间、操作人等。
章节来源
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
### 使用示例
- 用户注册与身份绑定:
- 创建 AuthUser,插入 AuthIdentity(identityType=账号,credential=加密密码)。
- 分配角色与部门:写入 SysUserRole 与 SysUserDept。
- 第三方登录流程:
- 根据第三方回调获取 thirdPartyId,查找或创建 AuthIdentity(identityType=第三方)。
- 校验成功后返回用户上下文。
- 权限与菜单加载:
- 基于用户角色与 SysRoleMenu 获取菜单树。
- 接口鉴权时校验 permission 是否命中。
章节来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
## 依赖关系分析
认证域实体依赖基础域的公共实体与配置,数据访问层通过 MyBatis-Plus 的 Mapper 接口进行 CRUD 操作。
```mermaid
graph LR
A["AuthUser"] --> B["AuthIdentity"]
A --> C["SysUserRole"]
C --> D["SysRole"]
D --> E["SysRoleMenu"]
E --> F["SysMenu"]
A --> G["SysUserDept"]
G --> H["SysDept"]
I["BaseEntity"] --> A
J["OwnedEntity"] --> A
K["CrmBaseMapper"] --> L["AuthUserMapper"]
K --> M["AuthIdentityMapper"]
K --> N["SysDeptMapper"]
K --> O["SysUserRoleMapper"]
K --> P["SysRoleMapper"]
K --> Q["SysMenuMapper"]
K --> R["SysRoleMenuMapper"]
K --> S["SysUserDeptMapper"]
```
图表来源
- [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java)
- [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java)
- [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java)
- [SysUserRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java)
- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java)
- [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java)
- [SysRoleMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java)
- [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java)
- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java)
- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java)
- [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
- [SysDeptMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java)
- [SysUserRoleMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java)
- [SysRoleMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
- [SysRoleMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java)
- [SysUserDeptMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java)
章节来源
- [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
- [SysDeptMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java)
- [SysUserRoleMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java)
- [SysRoleMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
- [SysRoleMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java)
- [SysUserDeptMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java)
## 性能考虑
- 索引优化:
- 为高频查询字段建立索引,如 user_id、identity_type、third_party_id、role_id、menu_id、dept_id。
- 组合唯一约束自动创建复合索引,提升去重与关联查询效率。
- 缓存策略:
- 部门树与菜单树可缓存,减少重复构建成本。
- 用户权限集可在会话或Redis中缓存,缩短鉴权路径。
- 批量操作:
- 批量插入角色菜单与用户部门关联,降低事务开销。
- 分页与投影:
- 列表查询使用分页与必要字段投影,减少网络传输与内存占用。
[本节为通用指导,不直接分析具体文件]
## 故障排查指南
- 常见错误与定位:
- 唯一性冲突:检查用户名、角色编码、菜单权限标识、第三方ID等是否重复。
- 层级循环:校验部门与菜单的父子关系,避免闭环。
- 状态非法:确认状态字段取值是否在枚举范围内。
- 审计字段未填充:检查 MetaObjectFillHandler 是否正确配置。
- 调试建议:
- 开启SQL日志,观察生成的SQL与参数。
- 使用单元测试覆盖注册、授权、鉴权流程。
- 通过日志追踪用户上下文与数据范围计算过程。
章节来源
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
## 结论
认证域实体围绕用户、身份、角色、菜单与部门构建了完整的权限与数据范围体系。通过统一的基类与枚举约束,确保了数据一致性与可维护性。配合 MyBatis-Plus 的数据访问层与填充策略,实现了高效的CRUD与审计能力。建议在开发中严格遵循唯一性、层级与状态约束,合理使用索引与缓存,保障系统性能与稳定性。
[本节为总结性内容,不直接分析具体文件]
## 附录
- ID生成策略:
- 使用 Snowflake 或自定义 ID 生成器,确保分布式环境下的唯一性。
- 配置项:
- MyBatis-Plus 配置包含分页、填充、注入器等,影响实体行为与SQL生成。
章节来源
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)