Skip to content

Commit 0df86cb

Browse files
authored
Merge pull request #504 from PROCOLLAB-github/fix/permissions
Настроен доступ к POST и GET ручке UserList
2 parents 1d3513c + 055dbde commit 0df86cb

2 files changed

Lines changed: 24 additions & 8 deletions

File tree

procollab/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@
118118
MIDDLEWARE = [
119119
"django_prometheus.middleware.PrometheusBeforeMiddleware",
120120
"django.middleware.security.SecurityMiddleware",
121+
"corsheaders.middleware.CorsMiddleware",
121122
"whitenoise.middleware.WhiteNoiseMiddleware",
122123
"django.contrib.sessions.middleware.SessionMiddleware",
123-
"corsheaders.middleware.CorsMiddleware",
124124
"django.middleware.common.CommonMiddleware",
125125
"django.middleware.csrf.CsrfViewMiddleware",
126126
"django.contrib.auth.middleware.AuthenticationMiddleware",

users/views.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
RetrieveUpdateDestroyAPIView,
2222
RetrieveAPIView,
2323
)
24-
from rest_framework.permissions import AllowAny, IsAuthenticated
24+
from rest_framework.permissions import AllowAny, IsAuthenticated, IsAdminUser
2525
from rest_framework.request import Request
2626
from rest_framework.response import Response
2727
from rest_framework.views import APIView
@@ -88,12 +88,20 @@
8888

8989
class UserList(ListCreateAPIView):
9090
queryset = User.objects.get_active()
91-
permission_classes = [AllowAny] # FIXME: change to IsAuthorized
9291
serializer_class = UserListSerializer
9392
pagination_class = UsersPagination
9493
filter_backends = (filters.DjangoFilterBackend,)
9594
filterset_class = UserFilter
9695

96+
def get_permissions(self):
97+
if self.request.method == "POST":
98+
permission_classes = [AllowAny]
99+
else:
100+
permission_classes = [
101+
IsAdminUser
102+
]
103+
return [permission() for permission in permission_classes]
104+
97105
def post(self, request, *args, **kwargs):
98106
serializer = self.get_serializer(data=request.data)
99107
serializer.is_valid(raise_exception=True)
@@ -104,7 +112,9 @@ def post(self, request, *args, **kwargs):
104112

105113
verify_email(user, request)
106114

107-
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
115+
return Response(
116+
serializer.data, status=status.HTTP_201_CREATED, headers=headers
117+
)
108118

109119

110120
class LikedProjectList(ListAPIView):
@@ -305,7 +315,9 @@ def get(self, request):
305315
token = request.GET.get("token")
306316

307317
try:
308-
payload = jwt.decode(jwt=token, key=settings.SECRET_KEY, algorithms=["HS256"])
318+
payload = jwt.decode(
319+
jwt=token, key=settings.SECRET_KEY, algorithms=["HS256"]
320+
)
309321
user = User.objects.get(id=payload["user_id"])
310322
access_token = RefreshToken.for_user(user).access_token
311323
refresh_token = RefreshToken.for_user(user)
@@ -357,7 +369,9 @@ def create(self, request, *args, **kwargs):
357369
)
358370
self.perform_create(serializer)
359371
headers = self.get_success_headers(serializer.data)
360-
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
372+
return Response(
373+
serializer.data, status=status.HTTP_201_CREATED, headers=headers
374+
)
361375

362376

363377
class AchievementDetail(RetrieveUpdateDestroyAPIView):
@@ -448,7 +462,8 @@ def put(self, request: Request, pk):
448462
return Response(status=status.HTTP_200_OK, data=data)
449463
except Exception:
450464
return Response(
451-
status=status.HTTP_400_BAD_REQUEST, data={"error": "Something went wrong"}
465+
status=status.HTTP_400_BAD_REQUEST,
466+
data={"error": "Something went wrong"},
452467
)
453468

454469

@@ -468,7 +483,8 @@ def post(self, request, *args, **kwargs):
468483
return Response("User already verified!", status=status.HTTP_200_OK)
469484
except User.DoesNotExist:
470485
return Response(
471-
"User with given email does not exists!", status=status.HTTP_404_NOT_FOUND
486+
"User with given email does not exists!",
487+
status=status.HTTP_404_NOT_FOUND,
472488
)
473489

474490

0 commit comments

Comments
 (0)