""" Permissions для board модуля. """ from rest_framework import permissions class IsBoardOwner(permissions.BasePermission): """ Проверка что пользователь - владелец доски. """ message = 'Только владелец доски может выполнить это действие.' def has_object_permission(self, request, view, obj): """Проверка доступа к объекту.""" # Для Board if hasattr(obj, 'owner'): return obj.owner == request.user # Для BoardElement if hasattr(obj, 'board'): return obj.board.owner == request.user return False class IsBoardOwnerOrParticipant(permissions.BasePermission): """ Проверка что пользователь - владелец или участник доски. """ message = 'У вас нет доступа к этой доске.' def has_object_permission(self, request, view, obj): """Проверка доступа к объекту.""" # Для Board if hasattr(obj, 'has_access'): return obj.has_access(request.user) # Для BoardElement if hasattr(obj, 'board'): return obj.board.has_access(request.user) # Для BoardSnapshot if hasattr(obj, 'board'): return obj.board.has_access(request.user) return False class IsBoardOwnerOrReadOnly(permissions.BasePermission): """ Владелец может редактировать, остальные - только чтение. """ def has_object_permission(self, request, view, obj): """Проверка доступа к объекту.""" # Чтение разрешено всем с доступом if request.method in permissions.SAFE_METHODS: if hasattr(obj, 'has_access'): return obj.has_access(request.user) if hasattr(obj, 'board'): return obj.board.has_access(request.user) # Редактирование только владельцу if hasattr(obj, 'owner'): return obj.owner == request.user if hasattr(obj, 'board'): return obj.board.owner == request.user return False