45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
"""
|
|
Permissions для видео модуля.
|
|
"""
|
|
from rest_framework import permissions
|
|
|
|
|
|
class IsVideoRoomParticipant(permissions.BasePermission):
|
|
"""
|
|
Проверка что пользователь - участник видеокомнаты.
|
|
"""
|
|
|
|
message = 'Вы не являетесь участником этой видеокомнаты.'
|
|
|
|
def has_object_permission(self, request, view, obj):
|
|
"""Проверка доступа к объекту."""
|
|
# Для VideoRoom
|
|
if hasattr(obj, 'mentor') and hasattr(obj, 'client'):
|
|
return request.user in [obj.mentor, obj.client]
|
|
|
|
# Для VideoParticipant
|
|
if hasattr(obj, 'room'):
|
|
return request.user in [obj.room.mentor, obj.room.client]
|
|
|
|
return False
|
|
|
|
|
|
class IsMentorOrReadOnly(permissions.BasePermission):
|
|
"""
|
|
Только ментор может редактировать, остальные - только чтение.
|
|
"""
|
|
|
|
def has_object_permission(self, request, view, obj):
|
|
"""Проверка доступа к объекту."""
|
|
# Чтение разрешено всем участникам
|
|
if request.method in permissions.SAFE_METHODS:
|
|
if hasattr(obj, 'room'):
|
|
return request.user in [obj.room.mentor, obj.room.client]
|
|
return request.user in [obj.mentor, obj.client]
|
|
|
|
# Редактирование только ментору
|
|
if hasattr(obj, 'room'):
|
|
return request.user == obj.room.mentor
|
|
return request.user == obj.mentor
|
|
|