Skip to content

业务规则梳理

文档编号:SYS-DES-BA-004
文档版本:1.0
创建日期:2026-03-08
文档作者:架构师
文档状态:✅ Reviewed and Approved(2026-03-08)


1. 概述

1.1 文档目的

本文档梳理System基础平台的核心业务规则,明确规则的优先级、实现方式和验证点,为系统开发和测试提供依据。

1.2 输入文档

  • 领域边界划分(SYS-DES-BA-001)
  • 领域模型设计(SYS-DES-BA-002)
  • 核心业务流程(SYS-DES-BA-003)
  • System系统业务需求文档(BRD)V1.1

1.3 规则分类

  • 结构性规则:数据结构和关系约束
  • 行为性规则:业务流程和状态转换规则
  • 计算性规则:数据计算和派生规则
  • 安全性规则:权限和安全控制规则

2. 用户管理规则

2.1 用户实体规则

2.1.1 用户标识规则

规则编号规则名称规则描述规则类型优先级实现方式
UR-001用户ID唯一性用户ID全局唯一,系统自动生成UUID结构性数据库主键约束
UR-002用户名唯一性用户名全局唯一,不区分大小写结构性数据库唯一索引
UR-003用户名格式字母开头,4-20位,允许字母数字下划线结构性正则表达式校验
UR-004邮箱唯一性邮箱地址全局唯一结构性数据库唯一索引
UR-005邮箱格式符合标准邮箱格式结构性正则表达式校验
UR-006手机号唯一性手机号全局唯一结构性数据库唯一索引
UR-007手机号格式大陆手机号11位结构性正则表达式校验

实现示例

java
public class Username {
    private static final Pattern PATTERN = Pattern.compile("^[a-zA-Z][a-zA-Z0-9_]{3,19}$");
    
    public Username(String value) {
        if (!PATTERN.matcher(value).matches()) {
            throw new InvalidUsernameException("用户名格式错误:字母开头,4-20位,允许字母数字下划线");
        }
        this.value = value.toLowerCase(); // 统一小写存储
    }
}

2.1.2 用户状态规则

规则编号规则名称规则描述规则类型优先级实现方式
UR-008状态枚举用户状态:启用(ENABLED)、禁用(DISABLED)、锁定(LOCKED)结构性枚举类型
UR-009状态转换-启用到禁用管理员可以手动禁用已启用用户行为性权限控制+状态机
UR-010状态转换-禁用到启用管理员可以手动启用已禁用用户行为性权限控制+状态机
UR-011状态转换-启用/禁用到锁定登录失败5次自动锁定行为性登录失败计数器
UR-012状态转换-锁定到启用锁定30分钟后自动解锁,或管理员手动解锁行为性定时任务/权限控制
UR-013锁定用户限制锁定用户无法登录,Token立即失效安全性登录拦截+Token撤销

状态转换图

mermaid
stateDiagram-v2
    [*] --> ENABLED: 创建用户
    ENABLED --> DISABLED: 管理员禁用
    DISABLED --> ENABLED: 管理员启用
    ENABLED --> LOCKED: 登录失败5次
    DISABLED --> LOCKED: 登录失败5次
    LOCKED --> ENABLED: 30分钟自动解锁
    LOCKED --> ENABLED: 管理员解锁

2.1.3 用户属性规则

规则编号规则名称规则描述规则类型优先级实现方式
UR-014真实姓名必填真实姓名不能为空,2-20位结构性非空校验+长度校验
UR-015主部门必填用户必须有一个主部门结构性外键约束+业务校验
UR-016员工编号唯一员工编号全局唯一,可为空结构性数据库唯一索引(允许NULL)
UR-017员工状态关联员工状态:在职(ACTIVE)、离职(RESIGNED)、试用期(PROBATION)结构性枚举类型
UR-018员工离职自动禁用员工离职时自动禁用用户账号行为性HR同步事件处理
UR-019创建时间不可修改用户创建时间一旦设置不可修改结构性只读字段
UR-020更新时间自动更新用户信息变更时自动更新更新时间结构性MyBatis Plus自动填充

2.2 用户密码规则

2.2.1 密码复杂度规则

规则编号规则名称规则描述规则类型优先级实现方式
PR-001密码长度密码长度8-20位结构性长度校验
PR-002密码复杂度必须包含大小写字母、数字、特殊字符结构性正则表达式校验
PR-003密码不能包含用户名密码不能包含用户名或其逆序安全性字符串匹配校验
PR-004密码不能是常见密码密码不能是常见弱密码(如123456)安全性弱密码字典校验
PR-005密码历史检查新密码不能与最近5次密码相同安全性密码历史表校验

密码复杂度正则

java
public class PasswordValidator {
    // 至少1个大写、1个小写、1个数字、1个特殊字符,8-20位
    private static final Pattern COMPLEXITY_PATTERN = 
        Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,20}$");
    
    public void validate(String password, String username) {
        // 复杂度校验
        if (!COMPLEXITY_PATTERN.matcher(password).matches()) {
            throw new WeakPasswordException("密码必须包含大小写字母、数字、特殊字符,8-20位");
        }
        
        // 不能包含用户名
        if (password.toLowerCase().contains(username.toLowerCase())) {
            throw new WeakPasswordException("密码不能包含用户名");
        }
        
        // 弱密码字典校验
        if (isCommonPassword(password)) {
            throw new WeakPasswordException("密码过于简单,请使用更复杂的密码");
        }
    }
}

2.2.2 密码安全规则

规则编号规则名称规则描述规则类型优先级实现方式
PR-006密码加密存储密码必须使用bcrypt加密存储安全性Spring Security BCrypt
PR-007密码不可反查系统无法反查用户明文密码安全性单向哈希
PR-008密码有效期密码有效期90天,到期需修改安全性定时任务提醒
PR-009首次登录修改密码首次登录或使用初始密码必须修改密码安全性登录拦截+强制跳转
PR-010密码重置Token有效期密码重置链接15分钟有效安全性Redis过期时间
PR-011密码重置后失效Token密码重置后所有Token立即失效安全性Token撤销

2.2.3 登录安全规则

规则编号规则名称规则描述规则类型优先级实现方式
LR-001登录失败计数连续登录失败5次锁定账号安全性Redis计数器
LR-002登录失败锁定时间锁定30分钟后自动解锁安全性Redis过期时间
LR-003登录IP限制可配置允许登录的IP范围安全性IP白名单校验
LR-004异地登录提醒检测到异地登录发送提醒安全性IP地理位置分析
LR-005会话超时30分钟无操作自动退出安全性Token过期时间
LR-006单点登录限制同一用户同时只能在一个设备登录(可配置)安全性Token互斥

2.3 用户操作规则

规则编号规则名称规则描述规则类型优先级实现方式
OR-001删除用户限制已登录、有操作日志、有待办的用户不可删除行为性关联数据检查
OR-002删除用户处理删除用户时保留历史数据,标记为已删除行为性逻辑删除
OR-003批量导入限制单次批量导入最多1000条记录行为性参数校验
OR-004批量导入异步超过100条记录使用异步处理行为性异步任务
OR-005用户信息变更审计关键信息变更需记录审计日志安全性AOP拦截

3. 权限管理规则

3.1 角色管理规则

3.1.1 角色实体规则

规则编号规则名称规则描述规则类型优先级实现方式
RR-001角色ID唯一性角色ID全局唯一结构性数据库主键约束
RR-002角色编码唯一性角色编码全局唯一结构性数据库唯一索引
RR-003角色编码格式字母开头,2-50位,允许字母数字下划线结构性正则表达式校验
RR-004角色名称唯一性角色名称全局唯一结构性数据库唯一索引
RR-005系统角色保护系统预置角色不可删除行为性业务逻辑校验
RR-006系统角色编码保护系统预置角色编码不可修改行为性业务逻辑校验

系统预置角色清单

角色编码角色名称说明可删除
SUPER_ADMIN超级管理员系统最高权限
SYSTEM_ADMIN系统管理员系统管理权限
DEPT_ADMIN部门管理员部门管理权限
NORMAL_USER普通用户基础操作权限

3.1.2 角色权限规则

规则编号规则名称规则描述规则类型优先级实现方式
RR-007操作权限依赖菜单权限分配操作权限必须先分配对应菜单权限行为性业务逻辑校验
RR-008数据权限范围数据权限:全部 > 本部门及子部门 > 本部门 > 本人结构性枚举类型
RR-009角色权限缓存角色权限变更后需刷新缓存行为性Cache Aside模式
RR-010角色权限审计角色权限变更需记录审计日志安全性AOP拦截

3.2 用户授权规则

3.2.1 用户角色规则

规则编号规则名称规则描述规则类型优先级实现方式
AR-001用户必须有一个角色用户至少分配一个角色结构性业务逻辑校验
AR-002主角色唯一用户只能有一个主角色结构性业务逻辑校验
AR-003角色互斥某些角色不能同时分配(如超级管理员和普通用户)行为性互斥矩阵校验
AR-004角色继承部门管理员自动继承该部门所有用户的数据权限计算性权限计算逻辑
AR-005角色变更实时生效用户角色变更后权限立即生效行为性缓存刷新

3.2.2 权限校验规则

规则编号规则名称规则描述规则类型优先级实现方式
AR-006权限校验方式用户权限 = 所有角色权限的并集计算性权限计算逻辑
AR-007数据权限计算取用户所有角色中最大的数据权限范围计算性权限比较逻辑
AR-008权限缓存策略用户权限缓存2小时,变更时主动失效行为性Redis缓存
AR-009权限校验日志敏感操作权限校验需记录日志安全性AOP拦截

权限计算示例

java
public class PermissionCalculator {
    
    public boolean hasPermission(UserId userId, Permission requiredPermission) {
        // 获取用户所有角色
        List<Role> roles = roleMapper.selectByUserId(userId);
        
        // 获取所有角色的权限
        Set<Permission> userPermissions = roles.stream()
            .flatMap(role -> permissionMapper.selectByRoleId(role.getRoleId()).stream())
            .collect(Collectors.toSet());
        
        // 检查是否包含所需权限
        return userPermissions.stream()
            .anyMatch(permission -> permission.implies(requiredPermission));
    }
    
    public DataScope calculateDataScope(UserId userId) {
        List<Role> roles = roleMapper.selectByUserId(userId);
        
        // 取最大权限范围
        return roles.stream()
            .map(Role::getDataScope)
            .max(Comparator.comparingInt(DataScope::getPriority))
            .orElse(DataScope.SELF);
    }
}

4. 组织架构规则

4.1 部门管理规则

4.1.1 部门实体规则

规则编号规则名称规则描述规则类型优先级实现方式
DR-001部门ID唯一性部门ID全局唯一结构性数据库主键约束
DR-002部门编码唯一性部门编码全局唯一结构性数据库唯一索引
DR-003部门编码格式2-50位,允许字母数字下划线结构性正则表达式校验
DR-004部门名称唯一性部门名称全局唯一结构性数据库唯一索引
DR-005部门层级限制部门层级建议不超过5级结构性业务逻辑校验
DR-006树路径冗余部门树路径冗余存储,如:/1/2/5/结构性字段存储
DR-007树层级冗余部门树层级冗余存储结构性字段存储

4.1.2 部门结构规则

规则编号规则名称规则描述规则类型优先级实现方式
DR-008父部门存在性父部门必须存在(根部门除外)结构性外键约束
DR-009无循环依赖部门不能成为自己的子部门结构性业务逻辑校验
DR-010禁用部门限制有子部门的部门不可禁用行为性关联数据检查
DR-011禁用部门限制有用户的部门不可禁用行为性关联数据检查
DR-012部门删除限制有子部门或用户的部门不可删除行为性关联数据检查
DR-013部门变更级联部门父节点变更时,所有子部门树路径需更新行为性级联更新

循环依赖检查示例

java
public class DepartmentService {
    
    public void changeParent(DeptId deptId, DeptId newParentId) {
        // 检查是否移动到子部门
        List<DeptId> childrenIds = getAllChildrenIds(deptId);
        if (childrenIds.contains(newParentId)) {
            throw new InvalidOperationException("不能将部门移动到其子部门下");
        }
        
        // 更新父部门
        Department dept = departmentMapper.selectById(deptId);
        dept.changeParent(newParentId);
        departmentMapper.updateById(dept);
        
        // 级联更新子部门树路径
        cascadeUpdateTreePath(deptId);
    }
    
    private List<DeptId> getAllChildrenIds(DeptId deptId) {
        List<DeptId> result = new ArrayList<>();
        List<Department> children = departmentMapper.selectByParentId(deptId);
        for (Department child : children) {
            result.add(child.getDeptId());
            result.addAll(getAllChildrenIds(child.getDeptId()));
        }
        return result;
    }
}

4.2 用户部门关系规则

规则编号规则名称规则描述规则类型优先级实现方式
DR-014主部门唯一用户只能有一个主部门结构性业务逻辑校验
DR-015主部门必填用户必须有一个主部门结构性非空校验
DR-016兼职部门可选用户可以有多个兼职部门结构性业务逻辑支持
DR-017部门负责人部门负责人自动获得部门管理员角色行为性事件处理
DR-018部门变更权限用户部门变更时数据权限需重新计算行为性事件处理

5. 系统配置规则

5.1 配置管理规则

5.1.1 配置实体规则

规则编号规则名称规则描述规则类型优先级实现方式
CR-001配置键唯一性配置键全局唯一结构性数据库唯一索引
CR-002配置键格式格式:category.subcategory.name,如web.system.name结构性正则表达式校验
CR-003配置类型限制配置值必须符合配置类型(STRING/NUMBER/BOOLEAN/JSON)结构性类型校验
CR-004系统配置保护系统预置配置不可删除行为性业务逻辑校验
CR-005敏感配置加密敏感配置(如密码、密钥)必须加密存储安全性AES加密

5.1.2 配置分类规则

规则编号规则名称规则描述规则类型优先级实现方式
CR-006Web配置分类以web.开头的配置属于Web端展示配置结构性命名约定
CR-007商务配置分类以biz.开头的配置属于商务信息配置结构性命名约定
CR-008系统配置分类以sys.开头的配置属于系统参数配置结构性命名约定
CR-009配置缓存配置变更后需刷新缓存行为性Cache Aside模式
CR-010配置变更审计配置变更需记录审计日志安全性AOP拦截

6. 认证授权规则

6.1 Token管理规则

规则编号规则名称规则描述规则类型优先级实现方式
TR-001Access Token有效期Access Token有效期2小时结构性JWT过期时间
TR-002Refresh Token有效期Refresh Token有效期7天结构性JWT过期时间
TR-003Token唯一性每个Token唯一标识结构性UUID生成
TR-004Token撤销支持主动撤销Token行为性Token黑名单
TR-005Token刷新Refresh Token只能使用一次安全性使用后失效
TR-006Token绑定Token绑定设备和IP(可选)安全性JWT Claims

6.2 会话管理规则

规则编号规则名称规则描述规则类型优先级实现方式
SR-001会话超时30分钟无操作会话超时结构性Token过期时间
SR-002会话续期活跃会话自动续期行为性Token刷新机制
SR-003会话并发同一用户支持多会话(可配置)行为性Token管理
SR-004强制下线管理员可强制用户下线行为性Token撤销

7. 审计日志规则

规则编号规则名称规则描述规则类型优先级实现方式
LR-001关键操作审计用户增删改、权限变更等关键操作必须记录审计日志安全性AOP拦截
LR-002登录日志记录所有登录尝试(成功/失败)必须记录安全性登录拦截器
LR-003审计日志不可修改审计日志一旦生成不可修改安全性只读表
LR-004审计日志不可删除审计日志在保留期内不可删除安全性业务逻辑控制
LR-005日志保留期限在线查询3个月,归档保留1年行为性定时归档任务
LR-006敏感数据脱敏审计日志中敏感数据需脱敏存储安全性数据脱敏处理

8. 规则优先级矩阵

8.1 按优先级分类

高优先级规则(必须实现)

领域规则数量关键规则
用户管理15用户标识唯一性、密码复杂度、登录安全
权限管理10角色编码唯一性、权限校验、数据权限
组织架构8部门编码唯一性、无循环依赖
认证授权6Token有效期、会话超时
审计日志4关键操作审计、日志不可修改

中优先级规则(建议实现)

领域规则数量关键规则
用户管理8员工关联、批量导入限制
权限管理4角色继承、权限缓存
组织架构4部门层级限制、部门负责人
系统配置3配置分类、配置缓存

低优先级规则(可选实现)

领域规则数量关键规则
用户管理3异地登录提醒、单点登录限制
权限管理1角色互斥
认证授权2Token绑定、会话并发

8.2 按实现阶段分类

第一阶段(MVP必需)

  • [ ] UR-001 ~ UR-007:用户标识规则
  • [ ] UR-008 ~ UR-013:用户状态规则
  • [ ] PR-001 ~ PR-007:密码基础规则
  • [ ] LR-001 ~ LR-003:登录安全规则
  • [ ] RR-001 ~ RR-007:角色基础规则
  • [ ] AR-001 ~ AR-003:用户授权基础规则
  • [ ] DR-001 ~ DR-007:部门基础规则
  • [ ] TR-001 ~ TR-003:Token基础规则

第二阶段(功能完善)

  • [ ] UR-014 ~ UR-020:用户属性规则
  • [ ] PR-008 ~ PR-011:密码高级规则
  • [ ] RR-008 ~ RR-010:角色权限规则
  • [ ] AR-004 ~ AR-009:权限计算规则
  • [ ] DR-008 ~ DR-018:部门结构规则
  • [ ] TR-004 ~ TR-006:Token高级规则
  • [ ] CR-001 ~ CR-010:系统配置规则

第三阶段(增强优化)

  • [ ] LR-004 ~ LR-006:登录增强规则
  • [ ] OR-001 ~ OR-005:用户操作规则
  • [ ] SR-001 ~ SR-004:会话管理规则
  • [ ] LR-001 ~ LR-006:审计日志规则

9. 规则实现检查清单

9.1 开发阶段检查点

检查项检查内容检查方式
数据库约束唯一索引、外键约束是否正确创建数据库Schema检查
实体校验值对象、实体属性校验是否正确实现单元测试
业务逻辑业务规则在Service层是否正确实现单元测试
权限控制权限校验是否正确配置集成测试
事件处理领域事件是否正确发布和处理集成测试

9.2 测试阶段检查点

检查项检查内容检查方式
正向测试符合规则的数据是否能正常处理功能测试
反向测试违反规则的数据是否被正确拦截异常测试
边界测试边界值是否符合预期边界测试
并发测试并发场景下规则是否仍然有效并发测试
性能测试规则校验对性能的影响性能测试

10. 附录

10.1 规则编号说明

前缀含义示例
URUser Rule 用户规则UR-001
PRPassword Rule 密码规则PR-001
LRLogin Rule 登录规则LR-001
OROperation Rule 操作规则OR-001
RRRole Rule 角色规则RR-001
ARAuthorization Rule 授权规则AR-001
DRDepartment Rule 部门规则DR-001
CRConfiguration Rule 配置规则CR-001
TRToken Rule Token规则TR-001
SRSession Rule 会话规则SR-001

10.2 规则类型说明

类型说明实现位置
结构性规则数据结构和关系约束数据库、实体类
行为性规则业务流程和状态转换Service层、领域模型
计算性规则数据计算和派生Service层、工具类
安全性规则权限和安全控制安全框架、拦截器

10.3 修订记录

版本日期修订人修订内容
1.02026-03-08架构师初始版本

文档编制:架构师
文档审核:技术负责人
编制日期:2026-03-08

Released under the MIT License.