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