57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
"""
|
|
Права доступа для расписания.
|
|
"""
|
|
from rest_framework import permissions
|
|
|
|
|
|
class IsLessonParticipant(permissions.BasePermission):
|
|
"""Проверка, является ли пользователь участником занятия."""
|
|
|
|
def has_object_permission(self, request, view, obj):
|
|
"""Проверка прав на объект занятия."""
|
|
# Админы имеют полный доступ
|
|
if request.user.is_staff or request.user.is_superuser:
|
|
return True
|
|
|
|
# Ментор занятия имеет полный доступ
|
|
if obj.mentor == request.user:
|
|
return True
|
|
|
|
# Клиент занятия имеет доступ на чтение
|
|
try:
|
|
if obj.client.user == request.user:
|
|
return request.method in permissions.SAFE_METHODS
|
|
except:
|
|
pass
|
|
|
|
# Родитель клиента имеет доступ на чтение
|
|
try:
|
|
if request.user.role == 'parent':
|
|
parent_children = request.user.parent_profile.children.all()
|
|
if obj.client in parent_children:
|
|
return request.method in permissions.SAFE_METHODS
|
|
except:
|
|
pass
|
|
|
|
return False
|
|
|
|
|
|
class IsMentorOrReadOnly(permissions.BasePermission):
|
|
"""Только менторы могут создавать/редактировать, остальные только читать."""
|
|
|
|
def has_permission(self, request, view):
|
|
"""Проверка общих прав."""
|
|
if request.method in permissions.SAFE_METHODS:
|
|
return True
|
|
|
|
return request.user.role == 'mentor'
|
|
|
|
def has_object_permission(self, request, view, obj):
|
|
"""Проверка прав на объект."""
|
|
if request.method in permissions.SAFE_METHODS:
|
|
return True
|
|
|
|
# Только создатель (ментор) может редактировать/удалять
|
|
return obj.mentor == request.user or request.user.is_staff
|
|
|