1+ import re
12from typing import Any , Optional
23
34from rest_framework .serializers import (
1415 Authorization_Group_Member ,
1516 User ,
1617)
18+ from application .access_control .queries .api_token import get_api_tokens_for_user
1719from application .access_control .queries .authorization_group_member import (
1820 get_authorization_group_member ,
1921)
@@ -111,6 +113,7 @@ class UserSerializer(UserListSerializer):
111113 has_authorization_groups = SerializerMethodField ()
112114 has_product_group_members = SerializerMethodField ()
113115 has_product_members = SerializerMethodField ()
116+ has_api_tokens = SerializerMethodField ()
114117
115118 class Meta :
116119 model = User
@@ -136,6 +139,7 @@ class Meta:
136139 "has_authorization_groups" ,
137140 "has_product_group_members" ,
138141 "has_product_members" ,
142+ "has_api_tokens" ,
139143 ]
140144
141145 def to_representation (self , instance : User ) -> dict [str , Any ]:
@@ -146,6 +150,7 @@ def to_representation(self, instance: User) -> dict[str, Any]:
146150 data .pop ("has_authorization_groups" )
147151 data .pop ("has_product_group_members" )
148152 data .pop ("has_product_members" )
153+ data .pop ("has_api_tokens" )
149154
150155 return data
151156
@@ -161,6 +166,9 @@ def get_has_product_group_members(self, obj: User) -> bool:
161166 def get_has_product_members (self , obj : User ) -> bool :
162167 return Product_Member .objects .filter (user = obj , product__is_product_group = False ).exists ()
163168
169+ def get_has_api_tokens (self , obj : User ) -> bool :
170+ return get_api_tokens_for_user (obj ).exists ()
171+
164172
165173class UserUpdateSerializer (ModelSerializer ):
166174 class Meta :
@@ -297,15 +305,17 @@ def get_name(self, obj: API_Token) -> str:
297305 return obj .user .username
298306
299307 def get_product (self , obj : API_Token ) -> Optional [int ]:
300- product_member = Product_Member .objects .filter (user = obj .user , product__is_product_group = False ).first ()
301- if product_member :
302- return product_member .product .pk
308+ if re .match ("-product-\\ d*-api_token-" , obj .user .username ):
309+ product_member = Product_Member .objects .filter (user = obj .user , product__is_product_group = False ).first ()
310+ if product_member :
311+ return product_member .product .pk
303312 return None
304313
305314 def get_product_group (self , obj : API_Token ) -> Optional [int ]:
306- product_member = Product_Member .objects .filter (user = obj .user , product__is_product_group = True ).first ()
307- if product_member :
308- return product_member .product .pk
315+ if re .match ("-product-\\ d*-api_token-" , obj .user .username ):
316+ product_member = Product_Member .objects .filter (user = obj .user , product__is_product_group = True ).first ()
317+ if product_member :
318+ return product_member .product .pk
309319 return None
310320
311321
0 commit comments