73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
"""
|
||
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
|
||
|