# Kylin RBAC - 法律合规文档

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

---

## 一、适用法律法规

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

| 控制点 | 要求 | 合规要点 |
|------|------|----------|
| 8.1.4.1 访问控制 | 最小权限原则，授予用户完成其任务所需的最小权限 | `least_privilege` 配置 + `BasePolicy`/`CrudPolicy` 实现 |
| 8.1.4.2 身份鉴别 | 密码复杂度要求 | 与 `kylin/user` 集成 |
| 8.1.4.5 用户权限管理 | 权限变更需审批和记录 | `HasRoles` trait 中 assign/remove/grant/revoke 均写入审计日志 |
| 8.1.4.6 安全审计 | 权限变更审计记录保留 ≥ 180 天 | 审计日志通过 `kylin/audit-log` 持久化 |

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

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十一条 | 采取数据分类、重要数据备份和加密等措施 | 权限数据加密存储，定期备份 |
| 第二十四条 | 用户提供真实身份信息 | 与 `kylin/user` 实名认证集成 |
| 第四十二条 | 不得泄露个人信息 | 权限数据不对外公开 |

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

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第六条 | 最小必要原则 | 最小权限原则确保用户仅访问必要数据 |
| 第五十一条 | 采取加密、去标识化等安全技术措施 | 权限数据访问控制 |

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

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十一条 | 建立数据分类分级制度 | 基于角色控制数据访问权限 |
| 第二十七条 | 数据处理活动应加强风险监测 | 权限变更异常检测 |
| 第二十九条 | 数据处理活动应留存审计记录 | 权限变更全部记录审计日志 |

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

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十七条 | 关键信息基础设施应当使用商用密码进行保护 | 权限数据加密传输 |

---

## 二、行业规范

### 2.1 RBAC 权限模型

- 依据 **NIST RBAC 标准 (ANSI/INCITS 359-2004)**，实现 RBAC0（核心）+ RBAC1（角色继承）
- 角色-权限模型：用户 → 角色 → 权限
- 支持多守卫（`guard` 配置），可区分 Web/API 权限

### 2.2 Gate/Policy 集成

- 依据 **Laravel 授权最佳实践**，Gate 自动注册所有权限
- `RbacServiceProvider::registerRbacGates()` 在启动时自动注册
- 业务层通过 `$this->authorize()` 或 `Gate::allows()` 使用

### 2.3 审计日志

- 依据 **等保 2.0 8.1.4.6**，权限变更操作需记录审计日志
- `HasRoles` trait 中以下操作自动写入审计日志：
  - `assignRole()` — 角色分配
  - `removeRole()` — 角色移除
  - `grantPermission()` — 权限授予
  - `revokePermission()` — 权限撤销
- 审计日志包含：操作用户、IP、时间、变更内容、标签（tag=rbac）
- 审计日志写入失败不中断业务，仅记录 warning 日志

### 2.4 最小权限原则

- `least_privilege` 配置：禁止创建拥有所有权限的角色
- `BasePolicy::isSuperAdmin()` 仅超级管理员拥有全部权限
- `CrudPolicy` 继承 `BasePolicy`，业务层仅需定义 `$resource` 属性

---

## 三、代码检测报告

### 3.1 检测结果

| 检测项 | 状态 | 说明 |
|------|------|------|
| 权限变更审计 | ✅ 已修复 | `HasRoles` trait 中 assign/remove/grant/revoke 均写入 `kylin/audit-log` |
| 最小权限原则 | ✅ 已修复 | `least_privilege` 配置 + `BasePolicy` 实现 |
| Gate 自动注册 | ✅ 已修复 | `RbacServiceProvider::registerRbacGates()` 自动注册所有权限 |
| BasePolicy / CrudPolicy | ✅ 已修复 | 业务层继承 `CrudPolicy` 并定义 `$resource` 即可实现标准 CRUD 权限 |
| RBAC 模型 | ✅ 已通过 | 用户-角色-权限完整实现 |
| 自定义守卫 | ✅ 已通过 | `guard` 配置 |
| 权限缓存 | ✅ 已通过 | 权限数据缓存，防止重复查询 |
| 角色继承 | ✅ 已通过 | 角色可继承角色，支持层级结构 |
| 权限分组 | ✅ 已通过 | 权限支持分组管理 |
| 审计日志降级 | ✅ 已通过 | 审计日志写入失败不中断业务（仅 warning） |
| 审计日志开关 | ✅ 已通过 | `audit.enabled` 配置可开关 |
| 权限变更通知 | ✅ 已修复 | `PermissionChangeNotifier` 敏感角色/权限变更自动通知（日志+数据库通知） |
| 权限定期审查 | ✅ 已修复 | `PermissionReviewCommand` 审查冗余权限/闲置角色/权限过度分配/不活跃用户（支持 auto-fix/notify/json） |

### 3.2 审查结论

本包为 RBAC 权限管理核心包，所有合规功能已实现。Gate 自动注册、BasePolicy/CrudPolicy、审计日志集成、权限变更通知（PermissionChangeNotifier）、权限定期审查（PermissionReviewCommand）均已完成。建议配置 cron `0 0 1 * *` 每月执行 `php artisan kylin:permission-review --auto-fix --notify`。

---

## 四、免责声明

本合规文档基于现行法律法规编制，仅供参考。用户应根据业务实际情况设计权限体系，并定期审查权限分配是否合理。生产环境建议每季度进行一次权限审计。