uchill/backend/apps/schedule/permissions.py

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