Skip to content

Commit 4315dda

Browse files
authored
Merge pull request #266 from PROCOLLAB-github/flexivanov237-pro-148
experts now are choosable
2 parents d0e5f0e + 33b5f73 commit 4315dda

File tree

4 files changed

+42
-1
lines changed

4 files changed

+42
-1
lines changed

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")
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 4.2.3 on 2024-02-12 06:50
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("partner_programs", "0004_auto_20231230_0002"),
10+
("users", "0044_auto_20240128_2236"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="expert",
16+
name="programs",
17+
field=models.ManyToManyField(
18+
related_name="experts", to="partner_programs.partnerprogram"
19+
),
20+
),
21+
]
22+

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)