Skip to content

Commit 136de39

Browse files
authored
Merge pull request #307 from PROCOLLAB-github/rate_projects_permissions_readded
readded permissions for exact users for exact programs
2 parents 19438dc + 8252bca commit 136de39

5 files changed

Lines changed: 42 additions & 2 deletions

File tree

project_rates/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def get(self, request, *args, **kwargs):
8989
for project in projects_serializer.data:
9090
filled_values = 0
9191
for criteria in project["criterias"]:
92-
if criteria.get("value", None):
92+
if criteria["name"] == "Комментарий" or criteria.get("value", None):
9393
filled_values += 1
9494

9595
if filled_values == len(project["criterias"]):

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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 4.2.3 on 2024-02-26 15:22
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", "0045_alter_customuser_v2_speciality"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="expert",
16+
name="programs",
17+
field=models.ManyToManyField(
18+
blank=True, related_name="experts", to="partner_programs.partnerprogram"
19+
),
20+
),
21+
]

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)