sync role permissions with main permission on signal
This commit is contained in:
@@ -4,3 +4,6 @@ from django.apps import AppConfig
|
|||||||
class AuthorizationConfig(AppConfig):
|
class AuthorizationConfig(AppConfig):
|
||||||
default_auto_field = 'django.db.models.BigAutoField'
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
name = 'apps.authorization'
|
name = 'apps.authorization'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
import apps.authorization.signals
|
||||||
|
|||||||
27
apps/authorization/signals.py
Normal file
27
apps/authorization/signals.py
Normal file
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user