diff --git a/authentik/tenants/models.py b/authentik/tenants/models.py index c7a7876ea65f..1fe41bf11506 100644 --- a/authentik/tenants/models.py +++ b/authentik/tenants/models.py @@ -87,11 +87,6 @@ def save(self, *args, **kwargs): raise IntegrityError("Cannot create schema named template") super().save(*args, **kwargs) - def delete(self, *args, **kwargs): - if self.schema_name in ("public", "template"): - raise IntegrityError("Cannot delete schema public or template") - super().delete(*args, **kwargs) - @property def serializer(self) -> Serializer: from authentik.tenants.api.tenants import TenantSerializer diff --git a/authentik/tenants/signals.py b/authentik/tenants/signals.py new file mode 100644 index 000000000000..643ae610ab63 --- /dev/null +++ b/authentik/tenants/signals.py @@ -0,0 +1,14 @@ +"""authentik tenants signals""" + +from django.db import models +from django.db.models.signals import pre_delete +from django.dispatch import receiver +from django_tenants.utils import get_public_schema_name + +from authentik.tenants.models import Tenant + + +@receiver(pre_delete, sender=Tenant) +def tenants_ensure_no_default_delete(sender, instance: Tenant, **kwargs): + if instance.schema_name == get_public_schema_name(): + raise models.ProtectedError("Cannot delete schema public", instance)