fix: invalidate auth context after tenant changes

This commit is contained in:
2026-07-29 19:24:15 +02:00
parent f823c30707
commit 922b3f43b7

View File

@@ -17,6 +17,7 @@ from govoplan_core.core.access import (
TenantContextSwitcher, TenantContextSwitcher,
) )
from govoplan_core.core.change_sequence import ChangeSequenceEntry, decode_sequence_watermark, encode_sequence_watermark, record_change, sequence_watermark_is_expired from govoplan_core.core.change_sequence import ChangeSequenceEntry, decode_sequence_watermark, encode_sequence_watermark, record_change, sequence_watermark_is_expired
from govoplan_core.core.principal_cache import invalidate_auth_principals
from govoplan_core.core.runtime import get_registry from govoplan_core.core.runtime import get_registry
from govoplan_core.db.session import get_session from govoplan_core.db.session import get_session
from govoplan_core.i18n import ( from govoplan_core.i18n import (
@@ -255,9 +256,11 @@ def _record_tenant_settings_section_changes(
after: dict[str, Any], after: dict[str, Any],
principal: ApiPrincipal, principal: ApiPrincipal,
) -> None: ) -> None:
changed = False
for section in TENANT_SETTINGS_SECTIONS: for section in TENANT_SETTINGS_SECTIONS:
if before.get(section) == after.get(section): if before.get(section) == after.get(section):
continue continue
changed = True
record_change( record_change(
session, session,
module_id=TENANCY_MODULE_ID, module_id=TENANCY_MODULE_ID,
@@ -270,6 +273,16 @@ def _record_tenant_settings_section_changes(
actor_id=principal.user.id, actor_id=principal.user.id,
payload={"section": section}, payload={"section": section},
) )
if changed:
invalidate_auth_principals(
session,
tenant_id=tenant_id,
source_module="tenancy",
resource_type="tenant_settings",
resource_id=tenant_id,
actor_type="user",
actor_id=principal.user.id,
)
def _record_tenant_list_change(session: Session, *, tenant: Tenant, operation: str, principal: ApiPrincipal) -> None: def _record_tenant_list_change(session: Session, *, tenant: Tenant, operation: str, principal: ApiPrincipal) -> None:
@@ -285,6 +298,16 @@ def _record_tenant_list_change(session: Session, *, tenant: Tenant, operation: s
actor_id=principal.user.id, actor_id=principal.user.id,
payload={"slug": tenant.slug, "name": tenant.name, "is_active": tenant.is_active}, payload={"slug": tenant.slug, "name": tenant.name, "is_active": tenant.is_active},
) )
invalidate_auth_principals(
session,
tenant_id=tenant.id,
source_module="tenancy",
resource_type="tenant",
resource_id=tenant.id,
actor_type="user",
actor_id=principal.user.id,
reason=operation,
)
def _tenant_list_delta_query(session: Session, *, since_sequence: int): def _tenant_list_delta_query(session: Session, *, since_sequence: int):