ponytracker/permissions/signals.py
Élie Bouttier b9b892417b fix: delete perm on user/group/team deletion
This is done manually using signal because we do not use a foreign key
so we do not have automatically cascade deletion.
2014-08-30 16:27:13 -07:00

50 lines
1.8 KiB
Python

from django.db.models.signals import pre_delete
from django.dispatch import receiver
from accounts.models import *
from permissions.models import *
"""
As permissions objects do not use a foreign key but instead an integer field
on the foreign object id, we can rely on database cascade deletion to delete
outaded permissions and we have to do it our-self.
"""
@receiver(pre_delete, sender=User, dispatch_uid="clean_user_perms")
def clean_user_perms(sender, instance, **kwargs):
# Clean global permissions
perms = GlobalPermission.objects.filter(grantee_id=instance.id,
grantee_type=GlobalPermission.GRANTEE_USER)
perms.delete()
# Clean project permissions
perms = ProjectPermission.objects.filter(grantee_id=instance.id,
grantee_type=GlobalPermission.GRANTEE_USER)
perms.delete()
@receiver(pre_delete, sender=Group, dispatch_uid="clean_group_perms")
def clean_group_perms(sender, instance, **kwargs):
# Clean global permissions
perms = GlobalPermission.objects.filter(grantee_id=instance.id,
grantee_type=GlobalPermission.GRANTEE_GROUP)
perms.delete()
# Clean project permissions
perms = ProjectPermission.objects.filter(grantee_id=instance.id,
grantee_type=GlobalPermission.GRANTEE_GROUP)
perms.delete()
@receiver(pre_delete, sender=Team, dispatch_uid="clean_team_perms")
def clean_team_perms(sender, instance, **kwargs):
print(instance)
print(instance.id)
# Clean global permissions
perms = GlobalPermission.objects.filter(grantee_id=instance.id,
grantee_type=GlobalPermission.GRANTEE_TEAM)
print(perms)
perms.delete()
# Clean project permissions
perms = ProjectPermission.objects.filter(grantee_id=instance.id,
grantee_type=GlobalPermission.GRANTEE_TEAM)
perms.delete()