Skip to content

Commit 79ae17d

Browse files
committed
readded permissions for exact users for exact programs
1 parent 19438dc commit 79ae17d

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

users/admin.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,8 @@ class UserAchievementAdmin(admin.ModelAdmin):
198198
class UserLinkAdmin(admin.ModelAdmin):
199199
list_display = ("id", "user", "link")
200200
list_display_links = ("id", "user", "link")
201+
202+
203+
@admin.register(Expert)
204+
class ExpertAdmin(admin.ModelAdmin):
205+
list_display = ("id", "user")

users/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,10 @@ class Expert(AbstractUserWithRole):
327327
preferred_industries = models.CharField(max_length=4096, null=True, blank=True)
328328
useful_to_project = models.TextField(blank=True)
329329

330+
programs = models.ManyToManyField(
331+
"partner_programs.PartnerProgram", related_name="experts", blank=True
332+
)
333+
330334
class Meta(TypedModelMeta):
331335
verbose_name = "Эксперт"
332336
verbose_name_plural = "Эксперты"

users/permissions.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
from rest_framework.exceptions import PermissionDenied
12
from rest_framework.permissions import BasePermission, SAFE_METHODS
23

4+
from users.models import Expert
5+
36

47
class IsAchievementOwnerOrReadOnly(BasePermission):
58
"""
@@ -18,4 +21,11 @@ class IsExpert(BasePermission):
1821
"""
1922

2023
def has_permission(self, request, view):
21-
return request.user.user_type == 3
24+
user = request.user
25+
program_id = view.kwargs.get("program_id")
26+
27+
if not user.user_type == 3:
28+
raise PermissionDenied("User is not an expert")
29+
if not Expert.objects.filter(programs__id=program_id, user=user).exists():
30+
raise PermissionDenied("You don't have permission to rate this program")
31+
return True

0 commit comments

Comments
 (0)