Skip to content

Commit 50a0e50

Browse files
committed
Update IsProjectChatMember permission
1 parent 2dc973e commit 50a0e50

5 files changed

Lines changed: 64 additions & 5 deletions

File tree

chats/permissions.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
1+
from django.contrib.auth import get_user_model
12
from rest_framework.permissions import BasePermission
23

4+
from projects.models import Project
5+
6+
User = get_user_model()
7+
38

49
class IsProjectChatMember(BasePermission):
10+
def has_permission(self, request, view) -> bool:
11+
try:
12+
project = Project.objects.get(pk=view.kwargs["pk"])
13+
except Project.DoesNotExist:
14+
return False
15+
if request.user in project.get_collaborators_user_list():
16+
return True
17+
return False
18+
519
def has_object_permission(self, request, view, obj):
6-
collaborators = [
7-
collaborator.user for collaborator in obj.project.collaborator_set.all()
8-
]
9-
if request.user in collaborators:
20+
if request.user in obj.project.get_collaborators_user_list():
1021
return True
1122
return False

chats/views.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ def get(self, request, *args, **kwargs) -> Response:
6262

6363
user1_id, user2_id = map(int, self.kwargs["pk"].split("_"))
6464

65+
assert (
66+
request.user.id == user1_id or request.user.id == user2_id
67+
), "current user id is not present in pk"
68+
6569
user1 = User.objects.get(pk=user1_id)
6670
user2 = User.objects.get(pk=user2_id)
6771

@@ -116,7 +120,7 @@ def get_queryset(self):
116120

117121
class ProjectChatMessageList(ListCreateAPIView):
118122
serializer_class = ProjectChatMessageListSerializer
119-
permission_classes = [IsAuthenticated]
123+
permission_classes = [IsProjectChatMember]
120124
pagination_class = MessageListPagination
121125

122126
def get_queryset(self):

projects/managers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
from django.contrib.auth import get_user_model
12
from django.db.models import Manager
23
from django.db.models import Prefetch
34

45
from industries.models import Industry
56
from users.models import CustomUser
67

8+
User = get_user_model()
9+
710

811
class ProjectManager(Manager):
912
def get_projects_for_list_view(self):

projects/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ class Project(models.Model):
7070
def get_short_description(self) -> Optional[str]:
7171
return self.description[:90] if self.description else None
7272

73+
def get_collaborators_user_list(self) -> list[User]:
74+
return [collaborator.user for collaborator in self.collaborator_set.all()]
75+
7376
def save(
7477
self, force_insert=False, force_update=False, using=None, update_fields=None
7578
):
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Generated by Django 4.2.3 on 2023-08-08 19:56
2+
3+
from django.db import migrations, models
4+
import users.validators
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("users", "0038_alter_customuser_options_customuser_ordering_score"),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name="customuser",
16+
name="first_name",
17+
field=models.CharField(
18+
max_length=255, validators=[users.validators.user_name_validator]
19+
),
20+
),
21+
migrations.AlterField(
22+
model_name="customuser",
23+
name="last_name",
24+
field=models.CharField(
25+
max_length=255, validators=[users.validators.user_name_validator]
26+
),
27+
),
28+
migrations.AlterField(
29+
model_name="customuser",
30+
name="patronymic",
31+
field=models.CharField(
32+
blank=True,
33+
max_length=255,
34+
null=True,
35+
validators=[users.validators.user_name_validator],
36+
),
37+
),
38+
]

0 commit comments

Comments
 (0)