ponytracker/permissions/signals.py
Élie Bouttier 92ea48f89d pep8
2014-08-30 17:47:19 -07:00

51 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()