diff --git a/mayan/apps/folders/api_views.py b/mayan/apps/folders/api_views.py index ee7b8b0610..87c0cbc68a 100644 --- a/mayan/apps/folders/api_views.py +++ b/mayan/apps/folders/api_views.py @@ -1,7 +1,13 @@ from __future__ import absolute_import +from django.core.exceptions import PermissionDenied +from django.shortcuts import get_object_or_404 + from rest_framework import generics +from documents.models import Document +from documents.permissions import PERMISSION_DOCUMENT_VIEW +from permissions.models import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -41,3 +47,25 @@ class APIFolderView(generics.RetrieveUpdateDestroyAPIView): 'PATCH': [PERMISSION_FOLDER_EDIT], 'DELETE': [PERMISSION_FOLDER_DELETE] } + + +class APIDocumentFolderListView(generics.ListAPIView): + """ + Returns a list of all the folders to which a document belongs. + """ + + serializer_class = FolderSerializer + + permission_classes = (MayanPermission,) + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_FOLDER_VIEW]} + + def get_queryset(self): + document = get_object_or_404(Document, pk=self.kwargs['pk']) + try: + Permission.objects.check_permissions(self.request.user, [PERMISSION_DOCUMENT_VIEW]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_DOCUMENT_VIEW, self.request.user, document) + + queryset = document.folders.all() + return queryset diff --git a/mayan/apps/folders/urls.py b/mayan/apps/folders/urls.py index dfb7a05161..ee030b514b 100644 --- a/mayan/apps/folders/urls.py +++ b/mayan/apps/folders/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import patterns, url -from .api_views import APIFolderListView, APIFolderView +from .api_views import (APIDocumentFolderListView, APIFolderListView, + APIFolderView) urlpatterns = patterns('folders.views', url(r'^list/$', 'folder_list', (), 'folder_list'), @@ -20,4 +21,5 @@ urlpatterns = patterns('folders.views', api_urls = patterns('', url(r'^folders/$', APIFolderListView.as_view(), name='folder-list'), url(r'^folders/(?P[0-9]+)/$', APIFolderView.as_view(), name='folder-detail'), + url(r'^document/(?P[0-9]+)/folders/$', APIDocumentFolderListView.as_view(), name='document-folder-list'), )