From fcf20335e8d1123fe2d3d47724ce3ab2397764b3 Mon Sep 17 00:00:00 2001 From: Bai Date: Fri, 10 Feb 2023 11:57:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E3=80=81=E7=94=A8=E6=88=B7=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=8D=B3=E4=BD=BF=E6=9B=B4=E6=96=B0=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/rbac/models/rolebinding.py | 8 ++++++++ apps/rbac/signal_handlers.py | 29 +++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/apps/rbac/models/rolebinding.py b/apps/rbac/models/rolebinding.py index b7795a498..f8f21d2bf 100644 --- a/apps/rbac/models/rolebinding.py +++ b/apps/rbac/models/rolebinding.py @@ -3,6 +3,7 @@ from django.db import models from django.db.models import Q from django.conf import settings from django.core.exceptions import ValidationError +from django.db.models.signals import post_save from rest_framework.serializers import ValidationError from common.db.models import JMSBaseModel, CASCADE_SIGNAL_SKIP @@ -15,6 +16,13 @@ __all__ = ['RoleBinding', 'SystemRoleBinding', 'OrgRoleBinding'] class RoleBindingManager(models.Manager): + + def bulk_create(self, objs, batch_size=None, ignore_conflicts=False): + objs = super().bulk_create(objs, batch_size=batch_size, ignore_conflicts=ignore_conflicts) + for i in objs: + post_save.send(i.__class__, instance=i, created=True) + return objs + def get_queryset(self): queryset = super(RoleBindingManager, self).get_queryset() q = Q(scope=Scope.system, org__isnull=True) diff --git a/apps/rbac/signal_handlers.py b/apps/rbac/signal_handlers.py index 37eed870a..bdc1e4a53 100644 --- a/apps/rbac/signal_handlers.py +++ b/apps/rbac/signal_handlers.py @@ -1,8 +1,8 @@ from django.dispatch import receiver -from django.db.models.signals import post_migrate, post_save +from django.db.models.signals import post_migrate, post_save, m2m_changed, post_delete from django.apps import apps -from .models import SystemRole, OrgRole +from .models import SystemRole, OrgRole, OrgRoleBinding, SystemRoleBinding from .builtin import BuiltinRole @@ -21,7 +21,32 @@ def on_system_role_update(sender, instance, created, **kwargs): User.expire_users_rbac_perms_cache() +@receiver(m2m_changed, sender=SystemRole.permissions.through) +def on_system_role_permission_changed(sender, instance, action, **kwargs): + from users.models import User + User.expire_users_rbac_perms_cache() + + +@receiver([post_save, post_delete], sender=SystemRoleBinding) +def on_system_role_binding_update(sender, instance, created, **kwargs): + from users.models import User + User.expire_users_rbac_perms_cache() + + @receiver(post_save, sender=OrgRole) def on_org_role_update(sender, instance, created, **kwargs): from users.models import User User.expire_users_rbac_perms_cache() + + +@receiver(m2m_changed, sender=OrgRole.permissions.through) +def on_org_role_permission_changed(sender, instance, action, **kwargs): + from users.models import User + User.expire_users_rbac_perms_cache() + + +@receiver([post_save, post_delete], sender=OrgRoleBinding) +def on_org_role_binding_update(sender, instance, **kwargs): + print('>>>>>>>>>>>') + from users.models import User + User.expire_users_rbac_perms_cache()