diff --git a/apps/authorization/apps.py b/apps/authorization/apps.py index 07d1ec0..4aa32c8 100644 --- a/apps/authorization/apps.py +++ b/apps/authorization/apps.py @@ -4,3 +4,6 @@ from django.apps import AppConfig class AuthorizationConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'apps.authorization' + + def ready(self): + import apps.authorization.signals diff --git a/apps/authorization/signals.py b/apps/authorization/signals.py new file mode 100644 index 0000000..c0ed576 --- /dev/null +++ b/apps/authorization/signals.py @@ -0,0 +1,27 @@ +from django.db.models import Sum +from apps.authorization.models import Role, UserRelations +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver + + +@receiver([post_save], sender=UserRelations) +def sync_role_permissions(sender, instance, **kwargs): + """ add role permissions to user relation permissions in is null """ + + # if _from_signal=True prevent from maximum recursion loop + if getattr(instance, '_from_signal', False): + return + + if instance.role: + permissions = instance.role.permissions.all() + if not instance.permissions.exists(): + instance.permissions.add(*permissions) # noqa + print(instance.permissions) + + instance._from_signal = True + instance.save() + + + + +