diff --git a/aleksis/core/schema/base.py b/aleksis/core/schema/base.py index e927dadccaaab7b2bf39c2110286970222f70f5b..d487fa74098cfd87fd0b3799a98d9734849ee25d 100644 --- a/aleksis/core/schema/base.py +++ b/aleksis/core/schema/base.py @@ -1,3 +1,5 @@ +from django.db.models import Model + import graphene from graphene_django import DjangoObjectType @@ -24,3 +26,23 @@ class FieldFileType(graphene.ObjectType): def resolve_absolute_url(root, info, **kwargs): return info.context.build_absolute_uri(root.url) if root else "" + + +class DeleteMutation(graphene.Mutation): + """Mutation to delete an object.""" + + klass: Model = None + permission_required: str = "" + ok = graphene.Boolean() + + class Arguments: + id = graphene.ID() # noqa + + @classmethod + def mutate(cls, root, info, **kwargs): + obj = cls.klass.objects.get(pk=kwargs["id"]) + if info.context.user.has_perm(cls.permission_required, obj): + obj.delete() + return cls(ok=True) + else: + raise Exception("Permission denied")