三员分立
Doggy 实现了符合中国等保标准的三员分立安全模型,通过 ThreeOfficersVoter 实现权限管控。
概述
三员分立将系统管理权限分离为三个独立角色,通过 App\Security\Voter\ThreeOfficersVoter 实现细粒度权限检查:
| 角色 | 权限范围 |
|---|---|
ROLE_SYS_ADMIN | 系统配置、用户管理 |
ROLE_SEC_ADMIN | 安全策略配置 |
ROLE_AUDITOR | 审计日志查看 |
三员相互独立、相互制约,任何单一角色无法完全控制系统。
Voter 权限定义
php
// src/Security/Voter/ThreeOfficersVoter.php
class ThreeOfficersVoter extends Voter
{
public const SYSTEM_CONFIG = 'SYSTEM_CONFIG'; // 系统管理员
public const USER_MANAGE = 'USER_MANAGE'; // 安全保密员
public const AUDIT_VIEW = 'AUDIT_VIEW'; // 安全审计员
public const BUSINESS_DATA = 'BUSINESS_DATA'; // 普通用户访问业务数据
}角色职责
系统管理员(ROLE_SYS_ADMIN)
- 用户账号管理
- 系统配置维护(
SYSTEM_CONFIG权限) - 应用部署管理
- 不能查看审计日志
- 不能修改安全策略
安全保密员(ROLE_SEC_ADMIN)
- 密码策略配置
- 权限策略管理(
USER_MANAGE权限) - 安全事件处理
- 不能管理用户账号
- 不能查看审计日志
安全审计员(ROLE_AUDITOR)
- 查看所有操作日志(
AUDIT_VIEW权限) - 审计报告生成
- 异常行为检测
- 不能修改任何系统配置
- 不能管理用户
初始化
通过 InitOfficersCommand 命令初始化三个管理员账号:
bash
php bin/console app:init-officers初始化后会创建三个默认账号。
默认账号
| 角色 | 用户名 | 初始密码 |
|---|---|---|
| 系统管理员 | admin | admin123 |
| 安全保密员 | security | security123 |
| 安全审计员 | auditor | auditor123 |
⚠️ 生产环境必须修改所有默认密码。
业务数据访问
普通认证用户(ROLE_USER)通过 BUSINESS_DATA 权限可正常访问业务数据,但无法执行管理操作。