Backport ACL computation improvements

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-05-04 03:27:30 -04:00
parent d271f1503d
commit 8e731d6280
61 changed files with 701 additions and 609 deletions

View File

@@ -248,7 +248,7 @@ class StagingFolderViewTestCase(GenericViewTestCase):
}
)
def test_staging_folder_delete_no_permission(self):
def test_staging_file_delete_no_permission(self):
staging_folder = StagingFolderSource.objects.create(
label=TEST_SOURCE_LABEL,
folder_path=self.temporary_directory,
@@ -263,11 +263,11 @@ class StagingFolderViewTestCase(GenericViewTestCase):
response = self._request_staging_file_delete_view(
staging_folder=staging_folder, staging_file=staging_file
)
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(len(list(staging_folder.get_files())), 1)
def test_staging_folder_delete_with_permission(self):
def test_staging_file_delete_with_permission(self):
self.grant_permission(permission=permission_staging_file_delete)
staging_folder = StagingFolderSource.objects.create(

View File

@@ -14,12 +14,13 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.acls.models import AccessControlList
from mayan.apps.checkouts.models import NewVersionBlock
from mayan.apps.common.menus import menu_facet
from mayan.apps.common.models import SharedUploadedFile
from mayan.apps.common.generics import (
ConfirmView, MultiFormView, SingleObjectCreateView,
SingleObjectDeleteView, SingleObjectEditView, SingleObjectListView
)
from mayan.apps.common.menus import menu_facet
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.common.models import SharedUploadedFile
from mayan.apps.documents.models import DocumentType, Document
from mayan.apps.documents.permissions import (
permission_document_create, permission_document_new_version
@@ -205,7 +206,7 @@ class UploadInteractiveView(UploadBaseView):
)
AccessControlList.objects.check_access(
obj=self.document_type, permissions=permission_document_create,
obj=self.document_type, permissions=(permission_document_create,),
user=request.user
)
@@ -386,7 +387,7 @@ class UploadInteractiveVersionView(UploadBaseView):
)
AccessControlList.objects.check_access(
obj=self.document, permissions=permission_document_new_version,
obj=self.document, permissions=(permission_document_new_version,),
user=self.request.user
)
@@ -474,28 +475,22 @@ class UploadInteractiveVersionView(UploadBaseView):
return context
class StagingFileDeleteView(SingleObjectDeleteView):
object_permission = permission_staging_file_delete
object_permission_related = 'staging_folder'
class StagingFileDeleteView(ExternalObjectMixin, SingleObjectDeleteView):
external_object_class = StagingFolderSource
external_object_permission = permission_staging_file_delete
def get_extra_context(self):
return {
'object': self.get_object(),
'object': self.object,
'object_name': _('Staging file'),
'source': self.get_source(),
'title': _('Delete staging file "%s"?') % self.object,
}
def get_object(self):
source = self.get_source()
return source.get_file(
return self.external_object.get_file(
encoded_filename=self.kwargs['encoded_filename']
)
def get_source(self):
return get_object_or_404(
klass=StagingFolderSource, pk=self.kwargs['pk']
)
# Setup views
class SetupSourceCheckView(ConfirmView):