ether-docs/_archive/domains-old/REVERSE-AUTH.md

37 KiB
Raw Permalink Blame History

认证授权域功能详细设计文档(反推自代码)

文档类型: 反推设计文档 数据来源: module-auth 实际代码 生成日期: 2026-04-23 对照文档: 05-AUTH.md原需求设计


一、领域概述

1.1 领域职责

认证授权域module-auth负责 Ether 平台的身份认证与授权管理,核心职责包括:

  • 身份认证:用户登录/登出、JWT Token 生成与验证、登录失败锁定
  • 用户管理:多类型用户(企业员工、项目员工、住户)的 CRUD 与扩展信息管理
  • RBAC 权限模型:角色-权限-用户三层关联,支持项目级角色隔离
  • 数据权限四级数据范围ALL/PROJECT/DEPARTMENT/SELF
  • 项目隔离:用户-项目多对多关联,项目成员管理与角色分配
  • 部门管理:树形组织架构,支持多种部门类型
  • 审计日志操作日志自动记录异步持久化30天查询窗口
  • 系统配置:键值对形式的系统参数管理

1.2 核心概念

概念 说明 对应实体
用户 系统登录账户,支持四种用户类型 User
企业员工 企业类型用户的扩展信息 EnterpriseUser
项目员工 项目类型员工的扩展信息,含班次、岗位状态 ProjectStaff
住户 业主/家属/租户,含认证流程 Resident
角色 权限集合,支持系统级/项目级/部门级 Role
权限 功能访问控制点,支持菜单/按钮/API三种类型 Permission
部门 组织架构节点,支持树形结构 Dept
用户-项目关联 用户参与项目的多对多关系 UserProject
项目员工角色 项目员工在项目中的角色分配 ProjectStaffRole
数据访问授权 细粒度数据访问控制记录 DataAccess
审计日志 操作审计记录 AuditLog
房屋空间 项目下的房屋/空间信息 Space
住户-房屋关联 住户与房屋的绑定关系 ResidentSpace
系统配置 键值对形式的系统参数 SysConfig

1.3 用户类型体系

User (基础用户)
├── EnterpriseUser (企业员工) — 共享主键一对一
│   └── 员工工号、部门、职位、入职日期、员工类别
├── ProjectStaff (项目员工) — 独立主键一对一
│   └── 所属项目、员工类型、班次、班组长、在岗状态
│       └── ProjectStaffRole (项目员工角色) — 一对多
└── Resident (住户) — 共享主键一对一
    └── 身份证、住户类型、认证状态
        └── ResidentSpace (住户-房屋关联) — 一对多

二、数据结构设计

2.1 User用户

字段 类型 约束 说明
id UUID PK, 自动生成 用户唯一标识符
username VARCHAR(50) NOT NULL, UNIQUE 登录用户名仅字母数字下划线3-50位
password VARCHAR(255) NOT NULL, JSON忽略 BCrypt加密密码
salt VARCHAR JSON忽略 密码盐值BCrypt模式下冗余
realName VARCHAR(50) 真实姓名
phone VARCHAR(20) 正则^1[3-9]\d{9}$ 手机号码
email VARCHAR(100) @Email 电子邮箱
avatar VARCHAR 头像URL
status VARCHAR(20) NOT NULL, 默认ACTIVE 用户状态枚举
userType VARCHAR(20) NOT NULL 用户类型ENTERPRISE/PROJECT_STAFF/RESIDENT/CUSTOMER
deptId UUID 所属部门ID
lastLoginTime LocalDateTime 最后登录时间
lastLoginIp VARCHAR 最后登录IP
roles List<Role> M2M, LAZY 关联角色列表通过auth_user_role表
createdAt LocalDateTime NOT NULL, 自动填充 创建时间
updatedAt LocalDateTime NOT NULL, 自动填充 更新时间
createdBy UUID 创建人ID

枚举UserStatus

描述
ACTIVE 正常
LOCKED 锁定
DISABLED 禁用

关联表auth_user_role

字段 类型 说明
user_id UUID FK → auth_user
role_id UUID FK → auth_role

2.2 Role角色

字段 类型 约束 说明
id UUID PK, 自动生成 角色唯一标识符
code VARCHAR(50) NOT NULL, UNIQUE 角色代码仅字母数字下划线2-50位
name VARCHAR(50) NOT NULL 角色名称
description VARCHAR(200) 角色描述
type VARCHAR(20) NOT NULL 角色类型枚举
dataScope VARCHAR(20) 默认SELF 数据范围枚举
projectId UUID 所属项目IDNULL=系统级)
status VARCHAR(20) NOT NULL, 默认ENABLED 角色状态枚举
permissions List<Permission> M2M, LAZY 关联权限列表通过auth_role_permission表
createdAt LocalDateTime NOT NULL, 自动填充 创建时间
updatedAt LocalDateTime NOT NULL, 自动填充 更新时间

枚举RoleType

描述
SYSTEM 系统级
PROJECT 项目级
DEPARTMENT 部门级

枚举DataScope

描述
ALL 全部数据
PROJECT 本项目数据
DEPARTMENT 本部门数据
SELF 仅本人数据

枚举RoleStatus

描述
ENABLED 启用
DISABLED 禁用

关联表auth_role_permission

字段 类型 说明
role_id UUID FK → auth_role
permission_id UUID FK → auth_permission

2.3 Permission权限

字段 类型 约束 说明
id UUID PK, 自动生成 权限唯一标识符
code VARCHAR(100) NOT NULL, UNIQUE 权限代码,格式module:resource:action,仅字母数字冒号下划线
name VARCHAR(100) NOT NULL 权限名称
type VARCHAR(20) 权限类型MENU/BUTTON/API
resource VARCHAR(50) 资源路径API类型
method VARCHAR(50) HTTP方法API类型
description VARCHAR(200) 权限描述
parentCode VARCHAR(50) 父权限代码(树形结构)
sortOrder Integer 排序序号
roles List<Role> M2M, LAZY 关联角色列表
createdAt LocalDateTime 自动填充 创建时间
updatedAt LocalDateTime 自动填充 更新时间

2.4 Dept部门

字段 类型 约束 说明
id UUID PK, 自动生成 部门唯一标识符
parentId UUID 上级部门IDNULL=顶级)
deptName VARCHAR(100) NOT NULL 部门名称
deptType VARCHAR(20) 默认ADMIN 部门类型
leaderId UUID 部门负责人ID
sortOrder Integer 排序序号
status VARCHAR(20) 默认ACTIVE 状态ACTIVE/DISABLED
createdAt LocalDateTime 自动填充 创建时间
updatedAt LocalDateTime 自动填充 更新时间
createdBy UUID 创建人ID
updatedBy UUID 更新人ID

枚举DeptType

描述
ADMIN 行政管理
ENGINEERING 工程部
SECURITY 安保部
CS 客服部
CLEANING 保洁部

2.5 EnterpriseUser企业员工

字段 类型 约束 说明
userId UUID PK, FK → auth_user 用户ID共享主键
employeeNo VARCHAR(50) 员工工号
deptId UUID 部门ID
position VARCHAR(50) 职位
entryDate LocalDate 入职日期
userCategory VARCHAR(50) 员工类别ENTERPRISE/MANAGEMENT
user User @OneToOne @MapsId 关联User实体

2.6 ProjectStaff项目员工

字段 类型 约束 说明
id UUID PK, 自动生成 主键ID
userId UUID FK → auth_user 用户ID
projectId UUID 所属项目ID
deptId UUID 所属部门ID
staffType VARCHAR(50) 员工类型
shiftType VARCHAR(20) 班次类型DAY/NIGHT/ROTATION
leaderId UUID 班组长ID
assignmentStatus VARCHAR(20) 在岗状态ASSIGNED/ON_LEAVE/TRANSFERRED
staffRoles List<ProjectStaffRole> @OneToMany, 级联删除 员工角色列表
createdAt LocalDateTime 创建时间
updatedAt LocalDateTime 更新时间
user User @OneToOne 关联User实体

StaffType 枚举值SECURITY / CLEANING / GARDEN / MAINTENANCE / CUSTOMER_SERVICE / GENERAL


2.7 ProjectStaffRole项目员工角色

字段 类型 约束 说明
id UUID PK, 自动生成 主键ID
staff ProjectStaff @ManyToOne, LAZY, NOT NULL 关联项目员工
role Role @ManyToOne, EAGER, NOT NULL 关联角色
createdAt LocalDateTime 自动填充 创建时间

2.8 Resident住户

字段 类型 约束 说明
userId UUID PK, FK → auth_user 用户ID共享主键
idCard VARCHAR(18) JSON忽略 身份证号码
residentType VARCHAR(20) 住户类型OWNER/FAMILY/TENANT
verificationStatus VARCHAR(20) 认证状态UNVERIFIED/PENDING/VERIFIED/REJECTED
verifiedAt LocalDateTime 认证时间
verifiedBy UUID 认证人ID
user User @OneToOne @MapsId 关联User实体
createdAt LocalDateTime NOT NULL 创建时间
updatedAt LocalDateTime NOT NULL 更新时间
createdBy UUID 创建人ID
updatedBy UUID 更新人ID

2.9 ResidentSpace住户-房屋关联)

字段 类型 约束 说明
id UUID PK, 自动生成 关联记录ID
userId UUID NOT NULL 用户ID
spaceId UUID NOT NULL 房屋ID
relationType VARCHAR(20) 关系类型OWNER/FAMILY/TENANT
bindingStatus VARCHAR(20) 绑定状态PENDING/ACTIVE/EXPIRED/CANCELLED
startDate LocalDate 生效日期
endDate LocalDate 失效日期NULL=永久)

2.10 Space房屋空间

字段 类型 约束 说明
id UUID PK, 自动生成 空间ID
projectId UUID 所属项目ID
building VARCHAR(50) 楼栋
unit VARCHAR(50) 单元
roomNo VARCHAR(50) 房号
spaceType VARCHAR(20) 房屋类型RESIDENTIAL/COMMERCIAL
floor Integer 楼层
unitArea BigDecimal 建筑面积(㎡)
status VARCHAR(20) 状态

2.11 UserProject用户-项目关联)

字段 类型 约束 说明
id UUID PK, 自动生成 关联记录ID
userId UUID NOT NULL 用户ID
projectId UUID NOT NULL 项目ID
roleInProject VARCHAR NOT NULL, 默认"member" 项目中角色leader/member/viewer
joinedAt LocalDateTime NOT NULL, 默认当前时间 加入时间

2.12 DataAccess数据访问授权

字段 类型 约束 说明
id UUID PK, 自动生成 授权记录ID
dataType VARCHAR NOT NULL 数据类型
dataId UUID NOT NULL 数据ID
accessType VARCHAR NOT NULL 访问者类型
accessId UUID NOT NULL 访问者ID
accessLevel VARCHAR NOT NULL, 默认"read" 访问级别
grantedBy UUID 授权人ID
grantedAt LocalDateTime NOT NULL, 默认当前时间 授权时间

2.13 AuditLog审计日志

字段 类型 约束 说明
id UUID PK, 自动生成 日志ID
userId UUID 操作用户ID
username VARCHAR(64) NOT NULL 操作用户名
operation VARCHAR(128) NOT NULL 操作描述
module VARCHAR(64) NOT NULL 模块标识
action VARCHAR(64) NOT NULL 操作类型枚举
targetType VARCHAR(64) 目标类型
targetId VARCHAR(64) 目标ID
content VARCHAR(2000) 操作内容
params LONGVARCHAR(5000) 请求参数
result LONGVARCHAR(5000) 操作结果
ipAddress VARCHAR(64) IP地址
userAgent VARCHAR(512) 用户代理
requestUrl VARCHAR(512) 请求URL
requestMethod VARCHAR(16) 请求方法
executionTimeMs Integer 执行耗时ms
status VARCHAR(16) 默认SUCCESS 状态枚举
errorMsg VARCHAR(2000) 错误信息
createdAt LocalDateTime NOT NULL, 自动填充 创建时间
tenantId UUID 租户ID

索引

  • idx_audit_log_created_at → createdAt
  • idx_audit_log_user_id → userId
  • idx_audit_log_module → module
  • idx_audit_log_action → action
  • idx_al_user_createdat → userId, createdAt DESC

枚举ActionType

描述
CREATE 创建
UPDATE 修改
DELETE 删除
QUERY 查询
VIEW 查看
LOGIN 登录
LOGOUT 登出
EXPORT 导出
IMPORT 导入
ASSIGN 分配
REVOKE 撤销

枚举Status

描述
SUCCESS 成功
FAIL 失败

2.14 SysConfig系统配置

字段 类型 约束 说明
id UUID PK, 自动生成 配置项ID
configKey VARCHAR(128) NOT NULL, UNIQUE 配置键
configValue VARCHAR(5000) 配置值
description VARCHAR(256) 配置描述
createdAt LocalDateTime NOT NULL, 自动填充 创建时间
updatedAt LocalDateTime NOT NULL, 自动填充 更新时间

2.15 实体关系图

┌──────────┐     M2M      ┌──────────┐     M2M      ┌────────────┐
│   User   │◄────────────►│   Role   │◄────────────►│ Permission │
└────┬─────┘  auth_user   └────┬─────┘ auth_role    └────────────┘
     │         _role            │        _permission
     │ 1:1                     │
     ▼                         ▼
┌──────────────┐       ┌──────────────────┐
│EnterpriseUser│       │  ProjectStaff    │
│  (共享主键)   │       │  (独立主键)       │
└──────────────┘       └───────┬──────────┘
                               │ 1:N
                               ▼
                       ┌──────────────────┐
                       │ProjectStaffRole  │──────► Role
                       └──────────────────┘

┌──────────┐     1:1     ┌──────────┐
│   User   │◄───────────►│ Resident │
└──────────┘             └────┬─────┘
                              │ 1:N
                              ▼
                      ┌───────────────┐     N:1     ┌───────┐
                      │ResidentSpace  │◄────────────►│ Space │
                      └───────────────┘              └───────┘

┌──────────┐     N:N     ┌──────────┐
│   User   │◄───────────►│ Project  │  (通过 UserProject)
└──────────┘              └──────────┘

┌──────────┐
│   Dept   │  树形结构parentId → 自引用)
└──────────┘

┌──────────┐
│DataAccess│  通用数据访问授权
└──────────┘

┌──────────┐
│ AuditLog │  操作审计日志
└──────────┘

┌──────────┐
│ SysConfig│  系统键值对配置
└──────────┘

三、API接口设计

3.1 AuthController — 认证管理

基础路径: /api/auth

方法 路径 说明 请求体 响应
POST /login 用户登录 {username, password} {token, userId, username, realName, roles}
POST /logout 用户登出 Header: Authorization void
GET /me 获取当前用户 Header: Authorization {username}
POST /refresh 刷新Token Header: Authorization {token}

登录流程

  1. 检查登录失败锁定Redis5次失败锁定10分钟
  2. 查询用户(含角色)
  3. 验证密码BCrypt
  4. 检查用户状态LOCKED/DISABLED拒绝
  5. 收集所有角色(用户直接角色 + 项目员工角色)
  6. 生成JWT Token含userId、username、roles claims
  7. 返回Token和用户基本信息

3.2 UserController — 用户管理

基础路径: /api/auth/users

方法 路径 说明 审计日志
GET / 分页查询用户列表 -
GET /{id} 根据ID获取用户 -
POST / 创建用户 CREATE
PUT /{id} 更新用户 UPDATE
DELETE /{id} 删除用户 DELETE
PUT /{id}/password 修改密码 UPDATE
POST /{id}/roles 分配角色 ASSIGN
GET /{id}/projects 获取用户项目列表 -
POST /{id}/projects 添加用户到项目 -
DELETE /{id}/projects/{projectId} 从项目移除用户 -
GET /enterprise 获取企业员工列表 -

密码修改规则

  • 需验证原密码
  • 新密码需通过强度校验8-20位大小写+数字+特殊字符)
  • 弱密码检测黑名单password、123456、admin等

3.3 RoleController — 角色管理

基础路径: /api/auth/roles

方法 路径 说明 审计日志
GET / 分页查询角色列表 -
GET /{id} 根据ID获取角色 -
GET /project/{projectId} 根据项目ID查询角色 -
POST / 创建角色 CREATE
PUT /{id} 更新角色 UPDATE
DELETE /{id} 删除角色 DELETE
POST /{id}/permissions 为角色分配权限 ASSIGN
GET /{id}/permissions 获取角色权限列表 -
GET /{id}/users 获取拥有某角色的用户 -

3.4 PermissionController — 权限管理

基础路径: /api/auth/permissions

方法 路径 说明 审计日志
GET / 分页查询权限列表 -
GET /{id} 根据ID获取权限 -
GET /type/{type} 根据类型查询权限 -
GET /menus 查询所有菜单权限 -
POST / 创建权限 -
PUT /{id} 更新权限 -
DELETE /{id} 删除权限 -

3.5 DeptController — 部门管理

基础路径: /api/auth/depts

方法 路径 说明 审计日志
GET /tree 获取部门树 -
GET / 获取所有启用部门 -
GET /{id} 根据ID获取部门 -
POST / 创建部门 CREATE
PUT /{id} 更新部门 UPDATE
DELETE /{id} 删除部门 DELETE
GET /{deptId}/members 获取部门成员 -
GET /by-type/{deptType} 根据类型查询部门 -

部门树构建后端返回扁平列表Controller层递归构建树形结构DeptVO含children字段


3.6 ProjectMemberController — 项目成员管理

基础路径: /api/auth/projects

方法 路径 说明 审计日志
GET /{projectId}/members 查询项目成员列表(分页) -
GET /{projectId}/available-members 获取可添加成员(企业员工) -
POST /{projectId}/members 添加项目成员 CREATE
DELETE /{projectId}/members/{userId} 移除项目成员 DELETE

添加项目成员流程

  1. 创建/更新 ProjectStaff 记录(设定员工类型、分配状态)
  2. 覆盖模式更新角色:先删除旧角色,再添加新角色
  3. 支持 search 参数模糊搜索可用成员(用户名/姓名)

3.7 DataAccessController — 数据访问授权

基础路径: /api/data-access

方法 路径 说明 请求体
POST / 授予数据访问权限 {dataType, dataId, accessType, accessId, accessLevel}
DELETE /{id} 撤销数据访问权限 -
GET / 查询数据访问记录 参数: dataType, dataId

授权逻辑:若已存在相同 dataType+dataId+accessType+accessId 的记录,则更新 accessLevel否则新建。


3.8 AuditLogController — 审计日志

基础路径: /api/audit-logs

方法 路径 说明
GET / 分页查询审计日志支持module/action/username/日期范围筛选)
GET /modules 获取模块列表(用于筛选下拉)
GET /actions 获取操作类型列表(用于筛选下拉)
GET /stats 获取最近30天日志统计

查询约束强制限制查询范围不超过30天防止大量数据查询。

模块列表USER / ROLE / PERMISSION / PROJECT / AUTH


3.9 SysConfigController — 系统配置

基础路径: /api/config

方法 路径 说明 审计日志
GET / 获取所有配置项 -
GET /{configKey} 根据键获取配置 -
PUT /{configKey} 更新单个配置 UPDATE
PUT / 批量更新配置 UPDATE

四、业务规则

4.1 RBAC 权限模型

模型结构User ←M2M→ Role ←M2M→ Permission

双层角色分配

  1. 用户直接角色:通过 auth_user_role 表关联,用户创建时或通过 UserController.assignRoles 分配
  2. 项目员工角色:通过 ProjectStaffRole 关联,项目成员管理时分配

登录时角色收集

用户所有角色 = 用户直接角色  项目员工角色

角色类型与数据范围

角色类型 说明 数据范围
SYSTEM 系统级角色,跨项目 ALL
PROJECT 项目级角色,绑定特定项目 PROJECT
DEPARTMENT 部门级角色 DEPARTMENT

4.2 四级数据范围

数据范围 编码 说明 实际效果
全部 ALL 可查看所有数据 不做数据过滤
项目 PROJECT 仅可查看所属项目数据 过滤 project_id
部门 DEPARTMENT 仅可查看本部门数据 过滤 project_id + dept_id
本人 SELF 仅可查看本人数据 过滤 assigned_to/creator

DataScopeService 实现

  • canAccessAllData(): 检查角色集中是否有 ALL 范围
  • isSelfScopeOnly(): 检查是否所有角色都是 SELF 范围
  • getPermittedProjectIds(): 获取用户可访问的项目ID列表

4.3 JWT 认证流程

Token 生成

  • 算法HMAC-SHA256
  • ClaimsuserIdsubject、username、roles 列表
  • 过期时间可配置默认86400000ms = 24小时

认证流程

1. 客户端 POST /api/auth/login {username, password}
2. 检查登录锁定Redis: login:attempt:{username}
3. 查询用户 + 验证密码BCrypt
4. 检查用户状态
5. 收集角色(直接角色 + 项目员工角色)
6. 生成 JWT Token
7. 返回 {token, userId, username, realName, roles}

后续请求:
1. 客户端 Header: Authorization: Bearer {token}
2. JwtTokenProvider.validateToken() 验证签名和过期
3. 解析 userId / username / roles

Token 刷新

  • POST /api/auth/refresh需携带有效Token
  • 生成新Token返回

4.4 登录失败锁定机制

实现LoginAttemptService基于Redis

参数 默认值 说明
maxAttempts 5 最大失败次数
lockoutDurationMinutes 10 锁定时长(分钟)
Key格式 login:attempt:{username} Redis Key

流程

  • 每次失败increment计数首次设置TTL
  • 达到上限isLockedOut返回true拒绝登录
  • 登录成功:清除计数
  • 手动解锁unlock方法清除Key

4.5 项目隔离机制

双层隔离

  1. UserProject 关联:用户-项目多对多,记录用户参与的项目
  2. ProjectStaff 扩展:项目员工在特定项目中的详细角色和状态

项目上下文传递

  • 请求头 X-Project-ID 携带当前项目ID
  • ProjectContextInterceptor 拦截器设置 ThreadLocal
  • 业务层通过 DataScopeService 过滤数据

项目成员管理

  • 添加成员:创建 ProjectStaff + 分配 ProjectStaffRole
  • 移除成员:删除 ProjectStaff级联删除角色关联
  • 角色分配:覆盖模式(先删后加)

4.6 审计日志

记录方式@OperationLog 注解 + AOP切面

@OperationLog(operation = "创建用户", module = "USER", action = AuditLog.ActionType.CREATE)

异步持久化:通过 auditLogExecutor 线程池异步保存,避免影响业务性能

查询窗口强制限制30天超过30天的查询自动截断起始时间

归档策略90天以上日志归档当前实现为直接删除TODO: 导出至对象存储)

记录模块USER / ROLE / PERMISSION / PROJECT / AUTH / DEPT / PROJECT_MEMBER / SYSTEM

4.7 密码加密与强度校验

加密算法BCryptSpring Security PasswordEncoder

强度校验规则(可配置,前缀 password.*

规则 默认值 说明
minLength 8 最小长度
maxLength 20 最大长度
requireUppercase true 需要大写字母
requireLowercase true 需要小写字母
requireDigit true 需要数字
requireSpecial true 需要特殊字符

弱密码检测:黑名单包含 password、123456、admin、qwerty、letmein、welcome、monkey、dragon

旧密码兼容检测非BCrypt格式密码MD5/SHA-1强制返回false要求重置


五、前端操作流程

5.1 登录

页面/auth/Login.vue

流程

  1. 输入用户名 + 密码
  2. 调用 POST /api/auth/login
  3. 存储 Token 到本地
  4. 跳转至主页

前端APIauth.tslogin(), logout(), getCurrentUser(), refreshToken()

5.2 项目选择

流程

  1. 登录后获取用户项目列表 GET /api/auth/users/{id}/projects
  2. 用户选择项目
  3. 后续请求携带 X-Project-ID Header

5.3 用户管理

页面/system/Users.vue, /system/UserDetail.vue

操作

  • 用户列表(分页、搜索、状态筛选)
  • 创建用户(用户名、密码、真实姓名、手机号、邮箱、用户类型、部门)
  • 编辑用户信息
  • 删除用户
  • 修改密码(需原密码)
  • 分配角色(多选,覆盖模式)
  • 查看用户参与的项目

前端APIuser.tsgetUsers(), createUser(), updateUser(), deleteUser(), updatePassword(), assignRoles(), getUserProjects()

5.4 角色管理

页面/system/Roles.vue

操作

  • 角色列表(分页、搜索)
  • 创建角色(代码、名称、描述、类型、数据范围、所属项目、状态)
  • 编辑角色
  • 删除角色
  • 为角色分配权限(多选,覆盖模式)
  • 查看角色关联的用户

前端APIrole.tsgetRoles(), createRole(), updateRole(), deleteRole(), assignPermissions(), getRolePermissions(), getRoleUsers(), getRolesByProject()

5.5 权限管理

页面/system/Permissions.vue

操作

  • 权限列表(分页、搜索)
  • 创建权限代码、名称、类型、资源路径、HTTP方法、描述、父权限、排序
  • 编辑权限
  • 删除权限
  • 按类型筛选MENU/BUTTON/API
  • 查看菜单权限

前端APIpermission.tsgetPermissions(), createPermission(), updatePermission(), deletePermission(), getPermissionsByModule()

5.6 部门管理

页面/system/Depts.vue

操作

  • 部门树展示
  • 创建部门(名称、上级部门、类型、负责人、排序)
  • 编辑部门
  • 删除部门(需先删除子部门)
  • 查看部门成员
  • 按类型筛选部门

前端APIdept.tsgetDeptTree(), getAllDepts(), createDept(), updateDept(), deleteDept(), getDeptMembers(), getDeptsByType()

5.7 审计日志

页面/system/Audit.vue

操作

  • 日志列表(分页、模块/操作类型/用户名/日期范围筛选)
  • 查看日志统计最近30天总量
  • 模块和操作类型下拉选项

前端APIaudit.tsgetAuditLogs(), getAuditModules(), getAuditActions(), getAuditStats()

5.8 系统设置

页面/system/Settings.vue

操作

  • 查看所有配置项(键值对)
  • 单个/批量更新配置值

前端APIsystem.tsgetConfig(), updateConfig()


六、与原需求文档 05-AUTH.md 的差异对比

6.1 实体差异

对比项 原需求 05-AUTH.md 实际代码实现 差异说明
Role.type SYSTEM / CUSTOM SYSTEM / PROJECT / DEPARTMENT 实际代码使用三级分类(系统/项目/部门),而非预设/自定义
Role 业务属性 有 businessType、terminalType、isFrontline 字段 无这些字段 实际代码未实现角色业务属性扩展
Role.status enabled (Boolean) status (RoleStatus枚举: ENABLED/DISABLED) 实际代码使用枚举而非布尔值
Permission 结构 有 projectId、module、resource、action、path、component、icon、parentId(UUID)、level、apiMethod、apiPath、enabled 无 projectId/module/resource/action/path/component/icon/parentId(UUID)/level/apiMethod/apiPath/enabled有 parentCode(String)、resource、method 实际代码简化了权限结构,用 parentCode 替代 parentId缺少菜单路由属性
Permission.type PermissionType 枚举 (MENU/BUTTON/API) String 类型 实际代码用字符串而非枚举
UserRole 关联 独立实体 UserRole含 projectId、isDefault JPA自动管理的 M2M 中间表 auth_user_role无额外字段 实际代码简化了关联,去掉了项目隔离和默认角色标记
OperationLog auth_operation_log 表,含 projectId、realName、description、requestBody、responseBody、responseStatus、hasError sys_audit_log 表,含 content、params、result、targetType、targetId、executionTimeMs、status、errorMsg、tenantId 实际代码使用了不同的表名和字段结构增加了目标追踪和租户ID
VisitorCredential 完整实体auth_visitor_credential 不存在于 module-auth 访客凭证未在认证模块实现
EnterpriseUser 未提及 存在,共享主键一对一 实际代码增加了企业员工扩展实体
ProjectStaff 未提及 存在,独立主键一对一 实际代码增加了项目员工扩展实体
ProjectStaffRole 未提及 存在,项目员工-角色关联 实际代码增加了项目级角色分配机制
Resident 未提及 存在,含认证流程 实际代码增加了住户实体
ResidentSpace 未提及 存在,住户-房屋关联 实际代码增加了住户房屋绑定
Space 未提及 存在,房屋空间 实际代码增加了房屋空间实体
UserProject 未提及 存在,用户-项目关联 实际代码增加了用户项目多对多
DataAccess 未提及 存在,细粒度数据访问控制 实际代码增加了数据访问授权机制
Dept 未提及 存在,树形部门结构 实际代码增加了部门管理
SysConfig 未提及 存在,键值对配置 实际代码增加了系统配置
User.userType 未提及 存在ENTERPRISE/PROJECT_STAFF/RESIDENT/CUSTOMER 实际代码增加了用户类型区分
User.deptId 未提及 存在 实际代码增加了部门关联

6.2 API 差异

对比项 原需求 05-AUTH.md 实际代码实现 差异说明
API路径前缀 /api/v1/auth /api/auth 实际代码去掉了版本号 v1
认证接口 login/logout/refreshToken/currentUser/changePassword/userPermissions login/logout/refresh/me 实际代码缺少 changePassword 和 userPermissions 独立端点,/me 替代 currentUser
用户状态修改 POST /{id}/status 独立端点 通过 PUT /{id} 更新status字段 实际代码合并到通用更新接口
权限树 GET /permissions/tree 未实现 实际代码缺少权限树端点
权限校验 POST /check 未实现 实际代码缺少权限校验端点
用户菜单 GET /users/{id}/menus 未实现 实际代码缺少用户菜单端点
用户权限查询 GET /users/{id}/permissions 未实现 实际代码缺少用户权限查询端点
部门管理 未提及 完整CRUD + 树 + 成员查询 实际代码新增了部门管理
项目成员管理 未提及 完整CRUD + 可用成员查询 实际代码新增了项目成员管理
数据访问授权 未提及 grant/revoke/query 实际代码新增了数据访问授权
审计日志 未提及 完整查询 + 统计 + 筛选选项 实际代码新增了审计日志管理
系统配置 未提及 完整CRUD + 批量更新 实际代码新增了系统配置管理
企业员工 未提及 GET /users/enterprise 实际代码新增了企业员工列表
用户项目关联 未提及 完整CRUD 实际代码新增了用户项目关联

6.3 业务规则差异

对比项 原需求 05-AUTH.md 实际代码实现 差异说明
角色体系 13个预定义角色SUPER_ADMIN到OWNER 角色通过数据库动态管理,无硬编码预定义 实际代码采用灵活的角色管理,未绑定固定角色列表
数据权限SQL生成 DataScopeHelper 工具类生成SQL片段 DataScopeService 提供判断方法 实际代码未实现SQL自动注入仅提供判断接口
项目上下文 ProjectContextHolder + 拦截器 同样实现,通过 X-Project-ID Header 基本一致
状态驱动权限 工单状态→操作映射设计 未在认证模块实现 实际代码未实现状态驱动权限(应在业务模块)
访客凭证 完整的二维码生成/验证流程 不存在于 module-auth 实际代码未实现访客凭证
登录失败锁定 未提及 Redis实现5次失败锁10分钟 实际代码新增了登录安全机制
密码强度校验 未提及 完整的强度规则 + 弱密码检测 实际代码新增了密码安全策略
旧密码兼容 未提及 检测非BCrypt格式强制重置 实际代码新增了密码迁移策略
审计日志 AOP切面 + 同步保存 AOP切面 + 异步保存 + 30天查询限制 + 90天归档 实际代码增强了审计日志管理
项目成员角色 未提及 双层角色(用户直接角色 + 项目员工角色) 实际代码新增了项目级角色分配
部门类型 未提及 5种部门类型行政/工程/安保/客服/保洁) 实际代码新增了部门分类
住户认证 未提及 4种认证状态未认证/待审核/已认证/已拒绝) 实际代码新增了住户认证流程
数据访问授权 未提及 通用数据访问控制dataType/dataId/accessType/accessId/accessLevel 实际代码新增了细粒度数据授权

6.4 差异总结

实际代码相比原需求增加的功能

  1. 多类型用户扩展EnterpriseUser / ProjectStaff / Resident
  2. 项目成员管理ProjectStaff + ProjectStaffRole
  3. 部门管理(树形结构 + 5种类型
  4. 住户与房屋关联ResidentSpace + Space
  5. 数据访问授权DataAccess
  6. 系统配置管理SysConfig
  7. 登录失败锁定Redis
  8. 密码强度校验 + 弱密码检测
  9. 审计日志增强异步保存、30天窗口、90天归档
  10. 用户-项目多对多关联UserProject

原需求中未实现的功能

  1. 角色业务属性businessType / terminalType / isFrontline
  2. 权限树端点GET /permissions/tree
  3. 权限校验端点POST /check
  4. 用户菜单端点GET /users/{id}/menus
  5. 用户权限查询端点GET /users/{id}/permissions
  6. 访客凭证管理VisitorCredential
  7. 状态驱动权限(工单状态→操作映射)
  8. Permission 的菜单路由属性path / component / icon
  9. Permission 的模块/资源/操作拆分字段module / resource / action
  10. UserRole 关联的项目隔离和默认角色标记