Skip to content

Commit ea2bb77

Browse files
authored
Merge pull request #63 from PROCOLLAB-github/dev
Dev
2 parents f824d60 + 74cbe13 commit ea2bb77

6 files changed

Lines changed: 23 additions & 7 deletions

File tree

projects/permissions.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from rest_framework.permissions import BasePermission, SAFE_METHODS
22

33

4-
class IsProjectLeaderOrReadOnly(BasePermission):
4+
class IsProjectLeaderOrReadOnlyForNonDrafts(BasePermission):
55
"""
66
Allows access to update only to project leader.
77
"""
@@ -12,6 +12,8 @@ def has_permission(self, request, view) -> bool:
1212
return False
1313

1414
def has_object_permission(self, request, view, obj):
15-
if request.method in SAFE_METHODS or (obj.leader == request.user):
15+
if (request.method in SAFE_METHODS and not obj.draft) or (
16+
obj.leader == request.user
17+
):
1618
return True
1719
return False

projects/serializers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class ProjectDetailSerializer(serializers.ModelSerializer):
6464
)
6565
vacancies = ProjectVacancyListSerializer(many=True, read_only=True)
6666
short_description = serializers.SerializerMethodField()
67+
industry_id = serializers.IntegerField(write_only=True, required=False)
6768

6869
def validate(self, data):
6970
super().validate(data)
@@ -97,6 +98,7 @@ class Meta:
9798
"vacancies",
9899
"datetime_created",
99100
"datetime_updated",
101+
"industry_id",
100102
]
101103
read_only_fields = ["leader"]
102104

projects/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from projects.filters import ProjectFilter
88
from projects.helpers import VERBOSE_STEPS
99
from projects.models import Project, Achievement
10-
from projects.permissions import IsProjectLeaderOrReadOnly
10+
from projects.permissions import IsProjectLeaderOrReadOnlyForNonDrafts
1111
from projects.serializers import (
1212
ProjectDetailSerializer,
1313
AchievementListSerializer,
@@ -71,7 +71,7 @@ def post(self, request, *args, **kwargs):
7171
class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
7272
queryset = Project.objects.get_projects_for_detail_view()
7373
serializer_class = ProjectDetailSerializer
74-
permission_classes = [IsProjectLeaderOrReadOnly]
74+
permission_classes = [IsProjectLeaderOrReadOnlyForNonDrafts]
7575

7676
def put(self, request, pk, **kwargs):
7777
# bootleg version of updating achievements via project
@@ -120,7 +120,7 @@ class ProjectCollaborators(generics.GenericAPIView):
120120
Project collaborator retrieve/add/delete view
121121
"""
122122

123-
permission_classes = [IsProjectLeaderOrReadOnly]
123+
permission_classes = [IsProjectLeaderOrReadOnlyForNonDrafts]
124124
queryset = Project.objects.all()
125125
serializer_class = ProjectCollaboratorSerializer
126126

users/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class Meta:
7474
"key_skills",
7575
"birthday",
7676
"speciality",
77+
"organization",
7778
"about_me",
7879
"avatar",
7980
"city",

vacancy/permissions.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ def has_object_permission(self, request, view, obj):
88
return False
99

1010

11+
class IsVacancyProjectLeader(BasePermission):
12+
"""
13+
Allows access to vacancy update only to project leader.
14+
"""
15+
16+
def has_object_permission(self, request, view, obj):
17+
if request.method in SAFE_METHODS or obj.project.leader == request.user:
18+
return True
19+
return False
20+
21+
1122
class IsProjectLeaderForVacancyResponse(BasePermission):
1223
def has_object_permission(self, request, view, obj):
1324
if obj.vacancy.project.leader == request.user:

vacancy/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
from rest_framework.generics import GenericAPIView
44
from rest_framework.response import Response
55

6-
from projects.permissions import IsProjectLeaderOrReadOnly
76
from vacancy.filters import VacancyFilter
87
from vacancy.models import Vacancy, VacancyResponse
98
from vacancy.permissions import (
109
IsProjectLeaderForVacancyResponse,
1110
IsVacancyResponseOwnerOrReadOnly,
11+
IsVacancyProjectLeader,
1212
)
1313
from vacancy.serializers import (
1414
ProjectVacancyListSerializer,
@@ -40,7 +40,7 @@ def create(self, request, *args, **kwargs):
4040
class VacancyDetail(generics.RetrieveUpdateDestroyAPIView):
4141
queryset = Vacancy.objects.get_vacancy_for_detail_view()
4242
serializer_class = VacancyDetailSerializer
43-
permission_classes = [IsProjectLeaderOrReadOnly]
43+
permission_classes = [IsVacancyProjectLeader]
4444

4545
def put(self, request, *args, **kwargs):
4646
"""updating the vacancy"""

0 commit comments

Comments
 (0)