44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""
|
||
Permissions для chat модуля.
|
||
"""
|
||
from rest_framework import permissions
|
||
|
||
|
||
class IsChatParticipant(permissions.BasePermission):
|
||
"""
|
||
Проверка что пользователь - участник чата.
|
||
"""
|
||
|
||
message = 'У вас нет доступа к этому чату.'
|
||
|
||
def has_object_permission(self, request, view, obj):
|
||
"""Проверка доступа к объекту."""
|
||
from .models import ChatParticipant
|
||
|
||
return ChatParticipant.objects.filter(
|
||
chat=obj,
|
||
user=request.user
|
||
).exists()
|
||
|
||
|
||
class IsMessageSender(permissions.BasePermission):
|
||
"""
|
||
Проверка что пользователь - отправитель сообщения.
|
||
"""
|
||
|
||
message = 'Вы можете редактировать/удалять только свои сообщения.'
|
||
|
||
def has_object_permission(self, request, view, obj):
|
||
"""Проверка доступа к объекту."""
|
||
# Для GET запросов разрешаем всем участникам чата
|
||
if request.method in permissions.SAFE_METHODS:
|
||
from .models import ChatParticipant
|
||
return ChatParticipant.objects.filter(
|
||
chat=obj.chat,
|
||
user=request.user
|
||
).exists()
|
||
|
||
# Для изменения/удаления только отправителю
|
||
return obj.sender == request.user
|
||
|