agent/authentic2: handle signals for soft creation/deletion of roles relations (#63199)

This commit is contained in:
Benjamin Dauvergne 2022-03-25 13:31:48 +01:00
parent 577438f7fa
commit 7f10b9a2c8
2 changed files with 12 additions and 1 deletions

View File

@ -17,6 +17,7 @@
from django.apps import AppConfig
from django.conf import settings
from django.db.models.signals import m2m_changed, post_save, pre_delete, pre_save
from django_rbac.signals import post_soft_create, post_soft_delete
class Plugin:
@ -45,6 +46,8 @@ class Authentic2AgentConfig(AppConfig):
post_save.connect(engine.post_save)
pre_delete.connect(engine.pre_delete)
m2m_changed.connect(engine.m2m_changed)
post_soft_create.connect(engine.post_soft_create)
post_soft_delete.connect(engine.post_soft_delete)
from django.core.management.base import BaseCommand

View File

@ -205,7 +205,7 @@ class Provisionning(threading.local):
roles = dict((r.id, r) for r in all_roles)
user_roles = {}
parents = {}
for rp in RoleParenting.objects.all():
for rp in RoleParenting.objects.filter(deleted__isnull=True):
# broken parent/child relationship can happen
try:
parents.setdefault(rp.child.id, []).append(rp.parent.id)
@ -490,6 +490,14 @@ class Provisionning(threading.local):
for other_instance in instance.members.all():
self.add_saved(other_instance)
def post_soft_create(self, sender, instance, **kwargs):
if isinstance(instance, RoleParenting):
self.add_saved(*list(instance.child.all_members()))
def post_soft_delete(self, sender, instance, **kwargs):
if isinstance(instance, RoleParenting):
self.add_saved(*list(instance.child.all_members()))
def notify_agents(self, data, sync=False):
log_path = getattr(settings, 'DEBUG_PROVISIONNING_LOG_PATH', '')
if log_path and getattr(settings, 'HOBO_PROVISIONNING_DEBUG', False):