Я хочу применить разрешения django к наборам и создаю декоратор для этого, но он не работает. Я просто хочу вызвать класс разрешений в декораторе, как передано в аргументе.
views.py
'' '
class MapViewSet(viewsets.ModelViewSet):
serializer_class = MapSerializer
@permission_decorator(permission_class=MapPermission)
def get_queryset(self):
return Map.objects.all()
' ''
utils.py
'' '
METHODS = {'GET': 'view_permission',
'PATCH': 'add_permission',
'POST': 'add_permission',
'PUT': 'add_permission',
'DELETE': 'delete_permission'}
def check_user_permission(permission, user, tag):
# logic here
return True/False
class CustomBasePermissions(permissions.BasePermission):
@abstractmethod
def has_permission(self, request, view):
pass
class PermissionError(APIException):
status_code = status.HTTP_403_FORBIDDEN
default_detail = {'message': "You Don't have required permission"}
class MapPermission(CustomBasePermissions):
def has_permission(self, request, view):
if request.role == "owner":
return True
else:
permission = METHODS.get(request.method)
return check_user_permission(permission, request.user, 'map')
' ''
decorators.py
'' '
def permission_decorator(permission_class):
assert permission_class is not None, (
"@permission_decorator() missing required argument: 'permission_class'"
)
def decorator(func):
func.permission_classes = permission_class
return func
return decorator
'' '