core: simplify group serializer for user API endpoint (#3899)
* core/api: Adding simple group serializer to improve user retrieval performance Due to the exhaustive use of the user_obj the performance suffers greatly if the users are assigned to large groups. This simple fix adds a new serializer that does not expose the user_obj within a group. * core/api: Update schema Update to the schema based on the new SimpleGroupSerializer * core/api: Fix black and pylint * make naming consistent, remove unnecessary fields Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> Co-authored-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -46,7 +46,6 @@ from structlog.stdlib import get_logger | ||||
|  | ||||
| from authentik.admin.api.metrics import CoordinateSerializer | ||||
| from authentik.api.decorators import permission_required | ||||
| from authentik.core.api.groups import GroupSerializer | ||||
| from authentik.core.api.used_by import UsedByMixin | ||||
| from authentik.core.api.utils import LinkSerializer, PassiveSerializer, is_dict | ||||
| from authentik.core.middleware import ( | ||||
| @ -74,6 +73,26 @@ from authentik.tenants.models import Tenant | ||||
| LOGGER = get_logger() | ||||
|  | ||||
|  | ||||
| class UserGroupSerializer(ModelSerializer): | ||||
|     """Simplified Group Serializer for user's groups""" | ||||
|  | ||||
|     attributes = JSONField(required=False) | ||||
|     parent_name = CharField(source="parent.name", read_only=True) | ||||
|  | ||||
|     class Meta: | ||||
|  | ||||
|         model = Group | ||||
|         fields = [ | ||||
|             "pk", | ||||
|             "num_pk", | ||||
|             "name", | ||||
|             "is_superuser", | ||||
|             "parent", | ||||
|             "parent_name", | ||||
|             "attributes", | ||||
|         ] | ||||
|  | ||||
|  | ||||
| class UserSerializer(ModelSerializer): | ||||
|     """User Serializer""" | ||||
|  | ||||
| @ -83,7 +102,7 @@ class UserSerializer(ModelSerializer): | ||||
|     groups = PrimaryKeyRelatedField( | ||||
|         allow_empty=True, many=True, source="ak_groups", queryset=Group.objects.all() | ||||
|     ) | ||||
|     groups_obj = ListSerializer(child=GroupSerializer(), read_only=True, source="ak_groups") | ||||
|     groups_obj = ListSerializer(child=UserGroupSerializer(), read_only=True, source="ak_groups") | ||||
|     uid = CharField(read_only=True) | ||||
|     username = CharField(max_length=150) | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Daniel
					Daniel