diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 5d69ae8c1f..6fb37090f1 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -7,17 +7,21 @@ from common.utils import encapsulate from project_setup.api import register_setup from documents.models import Document from documents.literals import PERMISSION_DOCUMENT_CREATE +from acls.models import class_permissions from sources.staging import StagingFile from sources.models import WebForm, StagingFolder, SourceTransformation, \ WatchFolder from sources.widgets import staging_file_thumbnail -sources_namespace = PermissionNamespace('sources_setup', _(u'Sources setup')) -PERMISSION_SOURCES_SETUP_VIEW = Permission.objects.register(sources_namespace, 'sources_setup_view', _(u'View existing document sources')) -PERMISSION_SOURCES_SETUP_EDIT = Permission.objects.register(sources_namespace, 'sources_setup_edit', _(u'Edit document sources')) -PERMISSION_SOURCES_SETUP_DELETE = Permission.objects.register(sources_namespace, 'sources_setup_delete', _(u'Delete document sources')) -PERMISSION_SOURCES_SETUP_CREATE = Permission.objects.register(sources_namespace, 'sources_setup_create', _(u'Create new document sources')) +sources_setup_namespace = PermissionNamespace('sources_setup', _(u'Sources setup')) +PERMISSION_SOURCES_SETUP_VIEW = Permission.objects.register(sources_setup_namespace, 'sources_setup_view', _(u'View existing document sources')) +PERMISSION_SOURCES_SETUP_EDIT = Permission.objects.register(sources_setup_namespace, 'sources_setup_edit', _(u'Edit document sources')) +PERMISSION_SOURCES_SETUP_DELETE = Permission.objects.register(sources_setup_namespace, 'sources_setup_delete', _(u'Delete document sources')) +PERMISSION_SOURCES_SETUP_CREATE = Permission.objects.register(sources_setup_namespace, 'sources_setup_create', _(u'Create new document sources')) + +sources_namespace = PermissionNamespace('sources', _(u'Sources')) +PERMISSION_DOCUMENT_NEW_VERSION = Permission.objects.register(sources_namespace, 'sources_document_new_version', _(u'Create new document version')) staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'view': 'staging_file_preview', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'zoom'} staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'delete', 'keep_query': True} @@ -38,7 +42,7 @@ setup_source_transformation_delete = {'text': _(u'delete'), 'view': 'setup_sourc source_list = {'text': _(u'Document sources'), 'view': 'setup_web_form_list', 'famfam': 'page_add', 'children_url_regex': [r'sources/setup']} -upload_version = {'text': _(u'upload new version'), 'view': 'upload_version', 'args': 'object.pk', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE]} +upload_version = {'text': _(u'upload new version'), 'view': 'upload_version', 'args': 'object.pk', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_NEW_VERSION]} register_links(StagingFile, [staging_file_delete]) @@ -75,3 +79,7 @@ register_model_list_columns(StagingFile, [ register_setup(setup_sources) + +class_permissions(Document, [ + PERMISSION_DOCUMENT_NEW_VERSION +]) diff --git a/apps/sources/views.py b/apps/sources/views.py index 55c2f6829c..1dcce811c4 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -14,6 +14,7 @@ from metadata.api import decode_metadata_from_url, metadata_repr_as_list from permissions.models import Permission from common.utils import encapsulate import sendfile +from acls.models import AccessEntry, PermissionDenied from sources.models import WebForm, StagingFolder, SourceTransformation, \ WatchFolder @@ -26,9 +27,9 @@ from sources.forms import StagingDocumentForm, WebFormForm, \ WatchFolderSetupForm from sources.forms import WebFormSetupForm, StagingFolderSetupForm from sources.forms import SourceTransformationForm, SourceTransformationForm_create -from sources import PERMISSION_SOURCES_SETUP_VIEW, \ - PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE, \ - PERMISSION_SOURCES_SETUP_CREATE +from sources import (PERMISSION_SOURCES_SETUP_VIEW, + PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE, + PERMISSION_SOURCES_SETUP_CREATE, PERMISSION_DOCUMENT_NEW_VERSION) def return_function(obj): @@ -71,14 +72,18 @@ def get_active_tab_links(document=None): } def upload_interactive(request, source_type=None, source_id=None, document_pk=None): - Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) - subtemplates_list = [] if document_pk: document = get_object_or_404(Document, pk=document_pk) + try: + Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_NEW_VERSION]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_DOCUMENT_NEW_VERSION, request.user, document) + results = get_active_tab_links(document) else: + Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) document = None results = get_active_tab_links() @@ -386,6 +391,7 @@ def staging_file_delete(request, source_type, source_id, staging_file_id): }, context_instance=RequestContext(request)) +# Setup views def setup_source_list(request, source_type): Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_VIEW])