core: fix core/user is_superuser filter (#13693) Signed-off-by: Jens Langhammer <jens@goauthentik.io> Co-authored-by: Jens L. <jens@goauthentik.io>
This commit is contained in:
		![98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com](/assets/img/avatar_default.png) gcp-cherry-pick-bot[bot]
					gcp-cherry-pick-bot[bot]
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							1a727b9ea0
						
					
				
				
					commit
					92a1f7e01a
				
			| @ -373,7 +373,7 @@ class UsersFilter(FilterSet): | |||||||
|         method="filter_attributes", |         method="filter_attributes", | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     is_superuser = BooleanFilter(field_name="ak_groups", lookup_expr="is_superuser") |     is_superuser = BooleanFilter(field_name="ak_groups", method="filter_is_superuser") | ||||||
|     uuid = UUIDFilter(field_name="uuid") |     uuid = UUIDFilter(field_name="uuid") | ||||||
|  |  | ||||||
|     path = CharFilter(field_name="path") |     path = CharFilter(field_name="path") | ||||||
| @ -391,6 +391,11 @@ class UsersFilter(FilterSet): | |||||||
|         queryset=Group.objects.all().order_by("name"), |         queryset=Group.objects.all().order_by("name"), | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |     def filter_is_superuser(self, queryset, name, value): | ||||||
|  |         if value: | ||||||
|  |             return queryset.filter(ak_groups__is_superuser=True).distinct() | ||||||
|  |         return queryset.exclude(ak_groups__is_superuser=True).distinct() | ||||||
|  |  | ||||||
|     def filter_attributes(self, queryset, name, value): |     def filter_attributes(self, queryset, name, value): | ||||||
|         """Filter attributes by query args""" |         """Filter attributes by query args""" | ||||||
|         try: |         try: | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| """Test Users API""" | """Test Users API""" | ||||||
|  |  | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
|  | from json import loads | ||||||
|  |  | ||||||
| from django.contrib.sessions.backends.cache import KEY_PREFIX | from django.contrib.sessions.backends.cache import KEY_PREFIX | ||||||
| from django.core.cache import cache | from django.core.cache import cache | ||||||
| @ -15,7 +16,11 @@ from authentik.core.models import ( | |||||||
|     User, |     User, | ||||||
|     UserTypes, |     UserTypes, | ||||||
| ) | ) | ||||||
| from authentik.core.tests.utils import create_test_admin_user, create_test_brand, create_test_flow | from authentik.core.tests.utils import ( | ||||||
|  |     create_test_admin_user, | ||||||
|  |     create_test_brand, | ||||||
|  |     create_test_flow, | ||||||
|  | ) | ||||||
| from authentik.flows.models import FlowDesignation | from authentik.flows.models import FlowDesignation | ||||||
| from authentik.lib.generators import generate_id, generate_key | from authentik.lib.generators import generate_id, generate_key | ||||||
| from authentik.stages.email.models import EmailStage | from authentik.stages.email.models import EmailStage | ||||||
| @ -41,6 +46,32 @@ class TestUsersAPI(APITestCase): | |||||||
|         ) |         ) | ||||||
|         self.assertEqual(response.status_code, 200) |         self.assertEqual(response.status_code, 200) | ||||||
|  |  | ||||||
|  |     def test_filter_is_superuser(self): | ||||||
|  |         """Test API filtering by superuser status""" | ||||||
|  |         self.client.force_login(self.admin) | ||||||
|  |         # Test superuser | ||||||
|  |         response = self.client.get( | ||||||
|  |             reverse("authentik_api:user-list"), | ||||||
|  |             data={ | ||||||
|  |                 "is_superuser": True, | ||||||
|  |             }, | ||||||
|  |         ) | ||||||
|  |         self.assertEqual(response.status_code, 200) | ||||||
|  |         body = loads(response.content) | ||||||
|  |         self.assertEqual(len(body["results"]), 1) | ||||||
|  |         self.assertEqual(body["results"][0]["username"], self.admin.username) | ||||||
|  |         # Test non-superuser | ||||||
|  |         response = self.client.get( | ||||||
|  |             reverse("authentik_api:user-list"), | ||||||
|  |             data={ | ||||||
|  |                 "is_superuser": False, | ||||||
|  |             }, | ||||||
|  |         ) | ||||||
|  |         self.assertEqual(response.status_code, 200) | ||||||
|  |         body = loads(response.content) | ||||||
|  |         self.assertEqual(len(body["results"]), 1, body) | ||||||
|  |         self.assertEqual(body["results"][0]["username"], self.user.username) | ||||||
|  |  | ||||||
|     def test_list_with_groups(self): |     def test_list_with_groups(self): | ||||||
|         """Test listing with groups""" |         """Test listing with groups""" | ||||||
|         self.client.force_login(self.admin) |         self.client.force_login(self.admin) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user