Merge pull request #1223 from AlanCoding/delete_user_role

Delete user role on deletion of a user
This commit is contained in:
Alan Rominger
2018-04-04 07:04:04 -04:00
committed by GitHub
2 changed files with 31 additions and 1 deletions

View File

@@ -179,6 +179,13 @@ def create_user_role(instance, **kwargs):
role.members.add(instance) role.members.add(instance)
def delete_user_role(instance, **kwargs):
if instance and instance.admin_role:
instance.admin_role.delete()
else:
logger.info(six.text_type("Could not delete the admin role for user {}").format(instance))
def org_admin_edit_members(instance, action, model, reverse, pk_set, **kwargs): def org_admin_edit_members(instance, action, model, reverse, pk_set, **kwargs):
content_type = ContentType.objects.get_for_model(Organization) content_type = ContentType.objects.get_for_model(Organization)
@@ -252,6 +259,7 @@ m2m_changed.connect(rbac_activity_stream, Role.members.through)
m2m_changed.connect(rbac_activity_stream, Role.parents.through) m2m_changed.connect(rbac_activity_stream, Role.parents.through)
post_save.connect(sync_superuser_status_to_rbac, sender=User) post_save.connect(sync_superuser_status_to_rbac, sender=User)
post_save.connect(create_user_role, sender=User) post_save.connect(create_user_role, sender=User)
pre_delete.connect(delete_user_role, sender=User)
pre_delete.connect(cleanup_detached_labels_on_deleted_parent, sender=UnifiedJob) pre_delete.connect(cleanup_detached_labels_on_deleted_parent, sender=UnifiedJob)
pre_delete.connect(cleanup_detached_labels_on_deleted_parent, sender=UnifiedJobTemplate) pre_delete.connect(cleanup_detached_labels_on_deleted_parent, sender=UnifiedJobTemplate)

View File

@@ -1,9 +1,10 @@
import pytest import pytest
from django.test import TransactionTestCase from django.test import TransactionTestCase
from django.contrib.contenttypes.models import ContentType
from awx.main.access import UserAccess from awx.main.access import UserAccess
from awx.main.models import User, Organization, Inventory from awx.main.models import User, Organization, Inventory, Role
@pytest.mark.django_db @pytest.mark.django_db
@@ -102,6 +103,27 @@ def test_org_user_removed(user, organization):
assert admin not in member.admin_role assert admin not in member.admin_role
@pytest.mark.django_db
def test_create_user_role(rando):
assert Role.objects.filter(
role_field='admin_role',
content_type=ContentType.objects.get_for_model(User),
object_id=rando.id
).count() == 1
assert rando in rando.admin_role
@pytest.mark.django_db
def test_user_role_deleted(rando):
rando_id = rando.id
rando.delete()
assert not Role.objects.filter(
role_field='admin_role',
content_type=ContentType.objects.get_for_model(User),
object_id=rando_id
)
@pytest.mark.django_db @pytest.mark.django_db
def test_org_admin_create_sys_auditor(org_admin): def test_org_admin_create_sys_auditor(org_admin):
access = UserAccess(org_admin) access = UserAccess(org_admin)