Persist hierarchical definition policy overrides

This commit is contained in:
2026-07-31 17:34:30 +02:00
parent 4d8bcec1f0
commit 798138ef7d
12 changed files with 1494 additions and 67 deletions
+68 -7
View File
@@ -1,6 +1,15 @@
from __future__ import annotations
from govoplan_core.core.access import CAPABILITY_AUTH_PERMISSION_EVALUATOR, CAPABILITY_AUTH_PRINCIPAL_RESOLVER
from pathlib import Path
from govoplan_core.core.access import (
CAPABILITY_AUTH_PERMISSION_EVALUATOR,
CAPABILITY_AUTH_PRINCIPAL_RESOLVER,
)
from govoplan_core.core.module_guards import (
drop_table_retirement_provider,
persistent_table_uninstall_guard,
)
from govoplan_core.core.policy import (
CAPABILITY_POLICY_DEFINITION_GOVERNANCE,
CAPABILITY_POLICY_PRIVACY_RETENTION,
@@ -8,11 +17,14 @@ from govoplan_core.core.policy import (
)
from govoplan_core.core.modules import (
FrontendModule,
MigrationSpec,
ModuleContext,
ModuleInterfaceProvider,
ModuleManifest,
)
from govoplan_core.core.views import ViewSurface
from govoplan_core.db.base import Base
from govoplan_policy.backend.db import models as policy_models
def _route_factory(context: ModuleContext):
@@ -31,7 +43,9 @@ def _privacy_retention_service(context: ModuleContext) -> object:
def _scheduling_participant_privacy_policy(context: ModuleContext) -> object:
del context
from govoplan_policy.backend.scheduling_privacy import SqlSchedulingParticipantPrivacyPolicy
from govoplan_policy.backend.scheduling_privacy import (
SqlSchedulingParticipantPrivacyPolicy,
)
return SqlSchedulingParticipantPrivacyPolicy()
@@ -49,7 +63,10 @@ manifest = ModuleManifest(
id="policy",
name="Policy",
version="0.1.9",
required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR),
required_capabilities=(
CAPABILITY_AUTH_PRINCIPAL_RESOLVER,
CAPABILITY_AUTH_PERMISSION_EVALUATOR,
),
provides_interfaces=(
ModuleInterfaceProvider(
name="policy.definition_governance",
@@ -57,14 +74,58 @@ manifest = ModuleManifest(
),
),
route_factory=_route_factory,
migration_spec=MigrationSpec(
module_id="policy",
metadata=Base.metadata,
script_location=str(Path(__file__).with_name("migrations") / "versions"),
retirement_supported=True,
retirement_provider=drop_table_retirement_provider(
policy_models.PolicyOverride,
label="Policy overrides",
),
retirement_notes=(
"Destructive retirement removes explicit definition and View "
"policy overrides after a database snapshot."
),
),
uninstall_guard_providers=(
persistent_table_uninstall_guard(
policy_models.PolicyOverride,
label="Policy overrides",
),
),
frontend=FrontendModule(
module_id="policy",
package_name="@govoplan/policy-webui",
view_surfaces=(
ViewSurface(id="policy.admin.system-retention", module_id="policy", kind="section", label="System retention", order=80),
ViewSurface(id="policy.admin.tenant-retention", module_id="policy", kind="section", label="Tenant retention", order=80),
ViewSurface(id="policy.admin.group-retention", module_id="policy", kind="section", label="Group retention", order=80),
ViewSurface(id="policy.admin.user-retention", module_id="policy", kind="section", label="User retention", order=80),
ViewSurface(
id="policy.admin.system-retention",
module_id="policy",
kind="section",
label="System retention",
order=80,
),
ViewSurface(
id="policy.admin.tenant-retention",
module_id="policy",
kind="section",
label="Tenant retention",
order=80,
),
ViewSurface(
id="policy.admin.group-retention",
module_id="policy",
kind="section",
label="Group retention",
order=80,
),
ViewSurface(
id="policy.admin.user-retention",
module_id="policy",
kind="section",
label="User retention",
order=80,
),
),
),
capability_factories={