diff --git a/apps/users/filters.py b/apps/users/filters.py index 4fe64ac..9754c70 100644 --- a/apps/users/filters.py +++ b/apps/users/filters.py @@ -1,14 +1,15 @@ import django_filters from .models import User +class ListUUIDFilter(django_filters.BaseInFilter, django_filters.UUIDFilter): + pass + class UserFilter(django_filters.FilterSet): - uuid_in = django_filters.UUIDFilter(required=True, lookup_expr='in') + uuid_in = ListUUIDFilter(field_name='uuid', required=True) class Meta: model = User fields = { # 'uuid': ['in'], - } - - + } \ No newline at end of file diff --git a/apps/users/urls.py b/apps/users/urls.py index 789744e..99aeea2 100644 --- a/apps/users/urls.py +++ b/apps/users/urls.py @@ -2,17 +2,17 @@ from django.urls import path from django.contrib.auth.views import LogoutView from .views import UserListView, UserPublicRetrieveView, AccountView, RequestOTPView, ChangePasswordView, \ OTPLoginView, ProfileDetailView, ProfileUpdateView, RequestOTTView, UserCurrentAvatarUrlView, UserInquiryView, \ - UserDetailedRetrieveView, UserSessionListView + UserDetailedRetrieveView, UserSessionListView, UserProfileView app_name = "users" - urlpatterns = [ path('login/', OTPLoginView.as_view(), name='login'), path('logout/', LogoutView.as_view(), name='logout'), path('account/', ProfileDetailView.as_view(), name='account_detail'), path('account/update/', ProfileUpdateView.as_view(), name='account_update'), path('api/account/', AccountView.as_view(), name='account_api'), - path('api/users/', UserListView.as_view(), name='user_list_api'), + path('api/users/all', UserListView.as_view(), name='user_list_api'), + path('api/users/', UserProfileView.as_view(), name='user_profile_list_api'), path('api/sessions/', UserSessionListView.as_view(), name='user_sessions_api'), path('api/users//', UserPublicRetrieveView.as_view(), name='user_public_retrieve_api'), path('api/users//avatar', UserCurrentAvatarUrlView.as_view(), name='user_avatar_api'), @@ -22,3 +22,4 @@ urlpatterns = [ path('api/change_password/', ChangePasswordView.as_view(), name='change_password_api'), path('api/inquiry/', UserInquiryView.as_view(), name='user_inquiry_api'), ] + diff --git a/apps/users/views.py b/apps/users/views.py index ef6b6f0..6485658 100644 --- a/apps/users/views.py +++ b/apps/users/views.py @@ -26,17 +26,27 @@ from utils.throttles import RequestOTPDayRateThrottle, RequestOTPMinRateThrottle UserModel = get_user_model() -class UserListView(generics.ListAPIView): +class BaseUserListView(generics.ListAPIView): permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] queryset = User.objects.all() serializer_class = PublicUserSerializer filter_backends = (DjangoFilterBackend,) - filterset_class = UserFilter + # Make filterset_class abstract - must be defined in subclasses + filterset_class = None + +class UserProfileView(BaseUserListView): + filterset_class = UserFilter required_alternate_scopes = { "GET": [["accounts.profile:list"]], } +class UserListView(BaseUserListView): + # filterset_class = UserFilter + required_alternate_scopes = { + "GET": [["accounts.users:list"]], + } + class UserPublicRetrieveView(generics.RetrieveAPIView): permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements]