uchill/backend/apps/board/permissions.py

73 lines
2.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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