From 2afeabf03e806df55b3fb700a3504a316a19d674 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 19 Dec 2011 23:49:33 -0400 Subject: [PATCH] Update folders app to use relative import, move permission to a separate file, import acl usage --- apps/folders/__init__.py | 22 +++++++------------- apps/folders/models.py | 4 ++++ apps/folders/permissions.py | 14 +++++++++++++ apps/folders/views.py | 40 +++++++++++++++++++++++++------------ 4 files changed, 52 insertions(+), 28 deletions(-) create mode 100644 apps/folders/permissions.py diff --git a/apps/folders/__init__.py b/apps/folders/__init__.py index 53f7dfb113..e2d847aff4 100644 --- a/apps/folders/__init__.py +++ b/apps/folders/__init__.py @@ -1,23 +1,15 @@ from django.utils.translation import ugettext_lazy as _ -from navigation.api import register_links, register_top_menu, \ - register_multi_item_links, register_sidebar_template +from navigation.api import (register_links, register_top_menu, + register_multi_item_links, register_sidebar_template) from documents.models import Document from documents.literals import PERMISSION_DOCUMENT_VIEW -from permissions.models import PermissionNamespace, Permission -from acls.models import class_permissions -from folders.models import Folder - -folder_namespace = PermissionNamespace('folders', _(u'Folders')) - -PERMISSION_FOLDER_LIST = Permission.objects.register(folder_namespace, 'folder_list', _(u'View all folders')) -PERMISSION_FOLDER_CREATE = Permission.objects.register(folder_namespace, 'folder_create', _(u'Create new folders')) -PERMISSION_FOLDER_EDIT = Permission.objects.register(folder_namespace, 'folder_edit', _(u'Edit new folders')) -PERMISSION_FOLDER_DELETE = Permission.objects.register(folder_namespace, 'folder_delete', _(u'Delete new folders')) -PERMISSION_FOLDER_REMOVE_DOCUMENT = Permission.objects.register(folder_namespace, 'folder_remove_document', _(u'Remove documents from folders')) -PERMISSION_FOLDER_VIEW = Permission.objects.register(folder_namespace, 'folder_view', _(u'View existing folders')) -PERMISSION_FOLDER_ADD_DOCUMENT = Permission.objects.register(folder_namespace, 'folder_add_document', _(u'Add documents to existing folders')) +from .models import Folder +from .permissions import (PERMISSION_FOLDER_LIST, PERMISSION_FOLDER_CREATE, + PERMISSION_FOLDER_EDIT, PERMISSION_FOLDER_DELETE, + PERMISSION_FOLDER_REMOVE_DOCUMENT, PERMISSION_FOLDER_VIEW, + PERMISSION_FOLDER_ADD_DOCUMENT) folder_list = {'text': _(u'folder list'), 'view': 'folder_list', 'famfam': 'folder_user', 'permissions': [PERMISSION_FOLDER_LIST]} folder_create = {'text': _('create folder'), 'view': 'folder_create', 'famfam': 'folder_add', 'permissions': [PERMISSION_FOLDER_CREATE]} diff --git a/apps/folders/models.py b/apps/folders/models.py index d41d25c6e4..f2a83ff32c 100644 --- a/apps/folders/models.py +++ b/apps/folders/models.py @@ -23,6 +23,10 @@ class Folder(models.Model): @models.permalink def get_absolute_url(self): return ('folder_view', [self.pk]) + + @property + def documents(self): + return [folder_document.document for folder_document in self.folderdocument_set.all()] class Meta: unique_together = ('title', 'user') diff --git a/apps/folders/permissions.py b/apps/folders/permissions.py new file mode 100644 index 0000000000..665439c1b5 --- /dev/null +++ b/apps/folders/permissions.py @@ -0,0 +1,14 @@ +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission +from acls.models import class_permissions + +folder_namespace = PermissionNamespace('folders', _(u'Folders')) + +PERMISSION_FOLDER_LIST = Permission.objects.register(folder_namespace, 'folder_list', _(u'View all folders')) +PERMISSION_FOLDER_CREATE = Permission.objects.register(folder_namespace, 'folder_create', _(u'Create new folders')) +PERMISSION_FOLDER_EDIT = Permission.objects.register(folder_namespace, 'folder_edit', _(u'Edit new folders')) +PERMISSION_FOLDER_DELETE = Permission.objects.register(folder_namespace, 'folder_delete', _(u'Delete new folders')) +PERMISSION_FOLDER_REMOVE_DOCUMENT = Permission.objects.register(folder_namespace, 'folder_remove_document', _(u'Remove documents from folders')) +PERMISSION_FOLDER_VIEW = Permission.objects.register(folder_namespace, 'folder_view', _(u'View existing folders')) +PERMISSION_FOLDER_ADD_DOCUMENT = Permission.objects.register(folder_namespace, 'folder_add_document', _(u'Add documents to existing folders')) diff --git a/apps/folders/views.py b/apps/folders/views.py index 09edaf3874..ac596086aa 100644 --- a/apps/folders/views.py +++ b/apps/folders/views.py @@ -9,15 +9,16 @@ from django.core.exceptions import PermissionDenied from documents.literals import PERMISSION_DOCUMENT_VIEW from documents.models import Document +from documents.views import document_list from permissions.models import Permission from common.utils import encapsulate from acls.models import AccessEntry, PermissionDenied from acls.views import acl_list_for, acl_new_holder_for -from folders.models import Folder, FolderDocument -from folders.forms import FolderForm, AddDocumentForm -from folders import (PERMISSION_FOLDER_LIST, PERMISSION_FOLDER_CREATE, - PERMISSION_FOLDER_EDIT, PERMISSION_FOLDER_DELETE, +from .models import Folder, FolderDocument +from .forms import FolderForm, AddDocumentForm +from .permissions import (PERMISSION_FOLDER_LIST, PERMISSION_FOLDER_CREATE, + PERMISSION_FOLDER_EDIT, PERMISSION_FOLDER_DELETE, PERMISSION_FOLDER_REMOVE_DOCUMENT, PERMISSION_FOLDER_VIEW, PERMISSION_FOLDER_ADD_DOCUMENT) @@ -143,19 +144,30 @@ def folder_delete(request, folder_id): def folder_view(request, folder_id): folder = get_object_or_404(Folder, pk=folder_id) + document_list = folder.documents + try: Permission.objects.check_permissions(request.user, [PERMISSION_FOLDER_VIEW]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_FOLDER_VIEW, request.user, folder) - return render_to_response('generic_list.html', { - 'object_list': [fd.document for fd in folder.folderdocument_set.all()], + context = { + 'object_list': document_list, 'hide_links': True, 'title': _(u'documents in folder: %s') % folder, 'multi_select_as_buttons': True, 'object': folder, - 'object_name': _(u'folder'), - }, context_instance=RequestContext(request)) + 'object_name': _(u'folder'), + + } + + #document_list + + return render_to_response( + 'generic_list.html', + context, + context_instance=RequestContext(request) + ) ''' def folder_add_document_sidebar(request, document_id): @@ -243,9 +255,15 @@ def document_folder_list(request, document_id): try: Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) + Permission.objects.check_permissions(request.user, [PERMISSION_FODLER_VIEW]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_DOCUMENT_VIEW, request.user, document) + try: + Permission.objects.check_permissions(request.user, [PERMISSION_FOLDER_REMOVE_DOCUMENT]) + except PermissionDenied: + folder_documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_REMOVE_DOCUMENT, request.user, folder_documents) + return folder_list( request, queryset=Folder.objects.filter(folderdocument__document=document), @@ -272,11 +290,7 @@ def folder_document_remove(request, folder_id, document_id=None, document_id_lis try: Permission.objects.check_permissions(request.user, [PERMISSION_FOLDER_REMOVE_DOCUMENT]) except PermissionDenied: - for document in folder_documents: - try: - AccessEntry.objects.check_access(PERMISSION_FOLDER_REMOVE_DOCUMENT, request.user, document) - except PermissionDenied: - folder_documents.remove(document) + folder_documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_REMOVE_DOCUMENT, request.user, folder_documents) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/')))