def revoke_group(group, perm, obj): """ Revokes a permission from a Group. """ model = obj.__class__ permissions = permission_map[model] try: group_perms = permissions.objects.get(group=group, obj=obj) if getattr(group_perms, perm): revoked.send(sender=group, perm=perm, object=obj) setattr(group_perms, perm, False) # If any permissions remain, save the model. Otherwise, remove it # from the table. if any(getattr(group_perms, p) for p in get_model_perms(model)): group_perms.save() else: group_perms.delete() except ObjectDoesNotExist: # Group didnt have permission to begin with; do nothing. pass
def set_group_perms(group, perms, obj): """ Set group permissions to exactly the specified permissions. """ if perms: model = obj.__class__ permissions = permission_map[model] all_perms = dict((p, False) for p in get_model_perms(model)) for perm in perms: all_perms[perm] = True try: group_perms = permissions.objects.get(group=group, obj=obj) except permissions.DoesNotExist: group_perms = permissions(group=group, obj=obj) for perm, enabled in all_perms.iteritems(): if enabled and not getattr(group_perms, perm): granted.send(sender=group, perm=perm, object=obj) elif not enabled and getattr(group_perms, perm): revoked.send(sender=group, perm=perm, object=obj) setattr(group_perms, perm, enabled) group_perms.save() else: # removing all perms. revoke_all_group(group, obj) return perms
def revoke_all_group(group, obj): """ Revoke all permissions from a Group. """ model = obj.__class__ permissions = permission_map[model] try: group_perms = permissions.objects.get(group=group, obj=obj) for perm in get_model_perms(model): if getattr(group_perms, perm): revoked.send(sender=group, perm=perm, object=obj) group_perms.delete() except ObjectDoesNotExist: pass
def revoke_all(user, obj): """ Revoke all permissions from a User. """ model = obj.__class__ permissions = permission_map[model] try: user_perms = permissions.objects.get(user=user, obj=obj) for perm in get_model_perms(model): if getattr(user_perms, perm): revoked.send(sender=user, perm=perm, object=obj) user_perms.delete() except ObjectDoesNotExist: pass