# Kylin User - 法律合规文档

> **版本**: 1.0  
> **最后更新**: 2026-06-19  
> **适用范围**: 所有使用 kylin/user 扩展包的用户管理系统  

---

## 一、适用法律法规

### 1.1 等保 2.0 (GB/T 22239-2019)

| 控制点 | 要求 | 合规要点 |
|------|------|----------|
| 8.1.4.2 身份鉴别 | 密码复杂度要求（长度、字母、数字、特殊字符） | `min_length=8`，大小写字母+数字 |
| 8.1.4.4 登录失败处理 | 登录失败锁定，防止暴力破解 | `max_attempts=5`，`lockout_minutes=30` |
| 8.1.4.5 用户权限管理 | 最小权限原则 | 与 `kylin/rbac` 集成 |
| 8.1.4.6 安全审计 | 审计日志记录 | 与 `kylin/audit-log` 集成 |

### 1.2 《中华人民共和国个人信息保护法》(2021.11.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第六条 | 最小必要原则 | `UserProfile` 仅收集必要的个人信息 |
| 第十三条 | 处理个人信息需取得个人同意 | `privacy.consent_required = true`，注册时需用户同意 |
| 第十四条 | 收集个人信息需取得用户同意 | 注册/登录时需明确告知信息用途 |
| 第十七条 | 需告知用户信息处理目的、方式和范围 | 隐私政策需在注册页面展示 |
| 第二十八条 | 敏感个人信息需单独同意并严格保护 | 身份证号、手机号加密存储（`encrypt_id_card/encrypt_phone`） |
| 第四十七条 | 处理目的已实现或保存期限届满时应删除 | `data_retention_days = 365`，到期自动清理 |
| 第五十一条 | 采取加密、去标识化等安全技术措施 | 密码 Hash 存储，敏感字段加密 |

### 1.3 《中华人民共和国未成年人保护法》(2021.6.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第七十二条 | 处理不满十四周岁未成年人个人信息的，应当征得未成年人父母或其他监护人同意 | 幼儿（≤7岁）和未成年人（8-17岁）分组处理 |
| 第七十五条 | 网络游戏服务提供者应当要求未成年人以真实身份信息注册 | 需与防沉迷系统集成 |

### 1.4 《中华人民共和国网络安全法》(2017.6.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十四条 | 用户提供真实身份信息 | 实名认证集成 |
| 第四十一条 | 收集个人信息应当遵循合法、正当、必要原则 | 仅收集系统运行必需的用户信息 |
| 第四十二条 | 不得泄露、篡改、毁损收集的个人信息 | 密码 Hash 存储，数据加密 |

### 1.5 《中华人民共和国数据安全法》(2021.9.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十一条 | 建立数据分类分级保护制度 | 用户信息按敏感度分级（基础信息/敏感信息） |
| 第二十七条 | 数据处理活动应加强风险监测 | 用户操作日志记录 |
| 第二十九条 | 数据处理活动应留存审计记录 | 用户增删改操作需审计 |

### 1.6 《中华人民共和国密码法》(2020.1.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十七条 | 关键信息基础设施应当使用商用密码进行保护 | 密码使用 bcrypt/argon2 哈希 |

---

## 二、行业规范

### 2.1 用户管理规范

- 依据 **《互联网用户账号信息管理规定》(2022.8.1)**，用户注册需提供真实身份信息
- 用户头像上传需限制大小（`max_size = 2048KB`）和格式
- 用户状态管理需支持：正常/禁用/待审核（`UserStatus` 枚举）

### 2.2 密码安全规范

- 依据 **NIST SP 800-63B**，密码最小长度 8 位，建议包含大小写字母和数字
- `password.expire_days` 支持密码过期策略（0=永不过期）
- 密码修改后记录 `password_changed_at` 时间戳

### 2.3 个人信息保护

- 依据 **《常见类型移动互联网应用程序必要个人信息范围规定》**，仅收集必要信息
- 手机号、身份证号加密存储（`encrypt_phone/encrypt_id_card`）
- 用户注销后个人信息保留期可配置（`data_retention_days`）

---

## 三、合规检查清单

### 3.1 密码安全

- [x] 密码最小长度 >= 8 位（`min_length = 8`）
- [x] 密码需包含大小写字母和数字（`password.policy` 配置）
- [x] 密码 Bcrypt/Argon2 哈希存储（`Hash::make()`）
- [x] 密码过期策略可配置（`password.expire_days`，0=永不过期）
- [x] 密码修改后记录 `password_changed_at` 时间戳

### 3.2 登录安全

- [x] 登录失败次数限制（`max_attempts = 5`）
- [x] 登录失败锁定时间（`lockout_minutes = 30`）
- [x] 账号状态管理（`UserStatus` 枚举：Active/Inactive/Pending）

### 3.3 个人信息保护

- [x] 最小必要原则（`UserProfile` 仅收集必要信息）
- [x] 手机号加密存储（`encrypt_phone` 配置）
- [x] 身份证号加密存储（`encrypt_id_card` 配置）
- [x] 用户信息按敏感度分级（基础信息/敏感信息）
- [x] 用户注销后个人信息保留期可配置（`data_retention_days = 365`）
- [x] 到期自动清理（`CleanUserDataCommand`，最小保留 90 天）
- [x] 用户头像上传限制大小（`max_size = 2048KB`）和格式

### 3.4 未成年人保护

- [x] 年龄分组（`age_groups` 四级分类：幼儿/未成年人/成年人/老年人）
- [x] 14 岁以下用户需监护人同意（`StoreUserRequest` 强制 `guardian_consent`）
- [x] 监护人信息收集（`guardian_name`、`guardian_phone`）
- [x] 与防沉迷系统集成（`kylin/anti-addiction` 联动）

### 3.5 权限与审计

- [x] 用户管理需 RBAC 权限控制（`UserPolicy` 继承 `CrudPolicy`）
- [x] 用户增删改操作需记录审计日志（`UserService` 全方法）
- [x] 审计日志中手机号自动脱敏（`UserService::maskPhone()`）
- [x] 用户操作日志记录（与 `kylin/audit-log` 集成）

### 3.6 数据安全

- [x] 密码 Hash 存储，不可逆
- [x] 敏感字段加密存储
- [x] 数据清理支持软删除和锁定用户清理
- [x] 清理命令支持 `--dry-run` 预览

---

## 四、代码检测报告

### 4.1 检测结果

| 检测项 | 状态 | 说明 |
|------|------|------|
| 密码复杂度 | ✅ 已通过 | 长度/大小写字母/数字/特殊字符 |
| 登录失败锁定 | ✅ 已通过 | `max_attempts=5`，`lockout_minutes=30` |
| 个人信息保护 | ✅ 已通过 | 隐私配置（加密/同意/保留期） |
| 年龄分组 | ✅ 已通过 | `age_groups` 四级分类 |
| 头像管理 | ✅ 已通过 | 默认头像 + 大小限制 + 存储磁盘 |
| 密码过期 | ✅ 已通过 | `password.expire_days` 可配置 |
| 用户状态枚举 | ✅ 已通过 | `UserStatus` 枚举（Active/Inactive/Pending） |
| 敏感字段加密 | ✅ 已通过 | `encrypt_id_card/encrypt_phone` 配置项 |
| 用户操作审计 | ✅ 已修复 | `UserService` 所有操作方法（create/update/delete/toggleStatus/changePassword/updateProfile）均写入 `kylin/audit-log` |
| 用户权限控制 | ✅ 已修复 | `UserPolicy` 继承 `CrudPolicy`，`UserController` 各方法已添加 `$this->authorize()` |
| 数据清理 | ✅ 已修复 | `CleanUserDataCommand` 支持软删除超期用户清理、锁定不活跃用户清理，最小保留 90 天 |
| 未成年人保护 | ✅ 已修复 | `StoreUserRequest` 新增 `birthday`/`guardian_consent`/`guardian_name`/`guardian_phone` 字段，14 岁以下强制监护人同意 |

### 4.2 审查结论

本包为用户管理基础包，所有合规功能已实现。操作审计（UserService 全方法）、权限控制（UserPolicy）、数据清理（CleanUserDataCommand）、未成年人保护（StoreUserRequest 监护人同意）均已完成。建议业务层使用 `php artisan user:clean --dry-run` 预览清理数据。

---

## 五、免责声明

本合规文档基于现行法律法规编制，仅供参考。用户应根据业务实际情况和最新法律法规调整合规策略。未成年人用户数据处理需经监护人同意。