Skip to content

三员分立

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

初始化后会创建三个默认账号。

默认账号

角色用户名初始密码
系统管理员adminadmin123
安全保密员securitysecurity123
安全审计员auditorauditor123

⚠️ 生产环境必须修改所有默认密码。

业务数据访问

普通认证用户(ROLE_USER)通过 BUSINESS_DATA 权限可正常访问业务数据,但无法执行管理操作。

基于 MIT 协议开源 | Copyright © 2026 Doggy