From fe7d4abe6fb0079cd40a47efc9c1a64dd0097b76 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 12 Oct 2016 10:39:01 +0200 Subject: [PATCH] Make sure to set the owner. see #937 --- modoboa/admin/tests/test_account.py | 20 +++++++++++++++++++- modoboa/core/models.py | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index def372820..ea3080ad4 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -74,6 +74,24 @@ class AccountTestCase(ModoTestCase): alias__internal=True).exists() ) + def test_delete_default_superadmin(self): + """Delete default superadmin.""" + sadmin2 = core_factories.UserFactory( + username="admin2", is_superuser=True) + sadmin = User.objects.get(username="admin") + self.client.force_login(sadmin2) + self.ajax_post( + reverse("admin:account_delete", args=[sadmin.pk]), {} + ) + values = { + "username": "user@test.com", "role": "DomainAdmins", + "is_active": True, "email": "user@test.com" + } + account = User.objects.get(username="user@test.com") + self.ajax_post( + reverse("admin:account_change", args=[account.pk]), values + ) + def test_sender_address(self): """Check if sender addresses are saved.""" account = User.objects.get(username="user@test.com") @@ -198,7 +216,7 @@ class AccountTestCase(ModoTestCase): self.assertIn("Resources usage", response.content) -@skipIf(NO_LDAP, 'No ldap module installed') +@skipIf(NO_LDAP, "No ldap module installed") @override_settings(AUTHENTICATION_BACKENDS=( 'modoboa.lib.authbackends.LDAPBackend', 'modoboa.lib.authbackends.SimpleBackend', diff --git a/modoboa/core/models.py b/modoboa/core/models.py index 39816d66f..5af31543b 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -118,6 +118,9 @@ class User(PermissionsMixin): raise PermDeniedException owner = get_object_owner(self) + if owner == self: + # The default admin is being removed... + owner = fromuser for ooentry in self.objectaccess_set.filter(is_owner=True): if ooentry.content_object is not None: grant_access_to_object(owner, ooentry.content_object, True)