| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from pathlib import Path
- from app.core.system.permissions import (
- SECURITY_GOVERNANCE_MANAGE,
- SECURITY_GOVERNANCE_OPERATE,
- SECURITY_GOVERNANCE_READ,
- permission_for_request,
- permissions_for_roles,
- )
- ROOT = Path(__file__).resolve().parents[1]
- def test_security_migration_is_additive_forward_only_and_evidence_bearing():
- migration = (ROOT / "migrations/versions/20260802_460_security_governance.py").read_text()
- assert 'revision = "20260802_460"' in migration
- assert 'down_revision = "20260802_450"' in migration
- for table in (
- "security_classification_profiles", "security_classification_scans",
- "security_classification_findings", "security_access_policies",
- "security_access_decisions", "security_egress_requests",
- "security_retention_policies", "security_siem_sinks",
- "security_siem_deliveries", "security_sboms",
- "security_vulnerabilities", "security_governance_events",
- "access_control_audit_events",
- ):
- assert f"CREATE TABLE public.{table}" in migration
- assert "raise RuntimeError" in migration
- assert "DROP TABLE" not in migration.upper()
- def test_security_permission_matrix_is_monotonic_and_risk_aware():
- assert SECURITY_GOVERNANCE_READ in permissions_for_roles(["viewer"])
- assert SECURITY_GOVERNANCE_OPERATE not in permissions_for_roles(["viewer"])
- assert SECURITY_GOVERNANCE_OPERATE in permissions_for_roles(["editor"])
- assert SECURITY_GOVERNANCE_MANAGE not in permissions_for_roles(["editor"])
- assert SECURITY_GOVERNANCE_MANAGE in permissions_for_roles(["admin"])
- assert permission_for_request("/api/system/security-governance/dashboard", "GET") == (SECURITY_GOVERNANCE_READ,)
- assert permission_for_request("/api/system/security-governance/scans", "POST") == (SECURITY_GOVERNANCE_OPERATE,)
- assert permission_for_request("/api/system/security-governance/findings/x/review", "POST") == (SECURITY_GOVERNANCE_MANAGE,)
- assert permission_for_request("/api/system/security-governance/egress/x/reconcile", "POST") == (SECURITY_GOVERNANCE_MANAGE,)
- assert permission_for_request("/api/system/security-governance/sboms", "POST") == (SECURITY_GOVERNANCE_MANAGE,)
- def test_security_surface_reuses_work_center_and_expands_safe_audit_categories():
- repository = (ROOT / "app/core/system/security_governance_repository.py").read_text()
- service = (ROOT / "app/core/system/security_governance.py").read_text()
- audit = (ROOT / "app/core/system/governance_audit_repository.py").read_text()
- work_center = (ROOT / "app/core/governance/work_center.py").read_text()
- assert "UnifiedWorkCenterService" in repository
- assert '"data_egress"' in work_center
- assert '"security_request"' in work_center
- assert "highly_sensitive_egress_disabled" in service
- assert '"authorization"' in audit
- assert '"workflow_task"' in audit
- assert '"data_product"' in audit
- assert '"agent"' in audit
- assert '"security_governance"' in audit
- assert "sample_values" not in repository
- def test_data_security_workbench_replaces_placeholder_with_operational_surfaces():
- client = (ROOT / "frontend/src/api/securityGovernance.js").read_text()
- view = (ROOT / "frontend/src/views/dataGovernance/dataSecurity/index.vue").read_text()
- routes = (ROOT / "frontend/src/router/routes.js").read_text()
- for operation in (
- "listSecurityFindings", "reviewSecurityFinding", "evaluateSecurityAccess",
- "createSecurityEgress", "reconcileSecurityEgress", "listSecurityRetention",
- "dispatchSecuritySiem", "registerSecuritySbom", "importSecurityVulnerabilities",
- "assignSecurityVulnerability", "resolveSecurityVulnerability", "closeSecurityVulnerability",
- ):
- assert operation in client
- for capability in (
- "数据安全治理", "分类发现与人工复核", "访问决策", "出域审批",
- "SBOM 与漏洞整改", "审计投递", "留存边界", "高敏感数据出域默认拒绝",
- "样本原值不落库", "不会自动删除",
- ):
- assert capability in view
- assert "功能将在后续迭代中建设" not in view
- assert "security-governance:read" in routes
|