45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""
|
||
Permissions для materials модуля.
|
||
"""
|
||
from rest_framework import permissions
|
||
|
||
|
||
class IsMaterialOwner(permissions.BasePermission):
|
||
"""
|
||
Проверка что пользователь - владелец материала.
|
||
"""
|
||
|
||
message = 'Только владелец материала может выполнить это действие.'
|
||
|
||
def has_object_permission(self, request, view, obj):
|
||
"""Проверка доступа к объекту."""
|
||
if hasattr(obj, 'owner'):
|
||
return obj.owner == request.user
|
||
return False
|
||
|
||
|
||
class IsMaterialOwnerOrShared(permissions.BasePermission):
|
||
"""
|
||
Проверка что пользователь - владелец или имеет доступ к материалу.
|
||
"""
|
||
|
||
message = 'У вас нет доступа к этому материалу.'
|
||
|
||
def has_object_permission(self, request, view, obj):
|
||
"""Проверка доступа к объекту."""
|
||
# Для Material
|
||
if hasattr(obj, 'has_access'):
|
||
return obj.has_access(request.user)
|
||
|
||
# Для MaterialFolder
|
||
if hasattr(obj, 'owner') and hasattr(obj, 'shared_with'):
|
||
if obj.owner == request.user:
|
||
return True
|
||
if obj.shared_with.filter(id=request.user.id).exists():
|
||
return True
|
||
if obj.is_public:
|
||
return True
|
||
|
||
return False
|
||
|