Merge remote-tracking branch 'origin/versions/micro' into versions/minor

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-11-27 04:05:06 -04:00
6 changed files with 78 additions and 20 deletions

View File

@@ -191,6 +191,15 @@
- Move the file patching code from the Dependency class to a
generalized utility of the storages app.
- Add book link to the documentation.
- Make the statistics slug field unique.
- Self-heal statistics results model when multiple
results are created using the same slug value.
Forum topic 1404.
- Update mayan_statistics migration 0002 to rename
duplicate slugs.
- Fix reverse inheritance permissions.
- Remove index create permission as an ACL permission
for indexes.
3.2.10 (2019-11-19)
===================

View File

@@ -6,12 +6,15 @@ import logging
from django.apps import apps
from django.utils.encoding import force_text
from mayan.apps.common.utils import get_related_field
logger = logging.getLogger(__name__)
class ModelPermission(object):
_functions = {}
_inheritances = {}
_inheritances_reverse = {}
_manager_names = {}
_registry = {}
@@ -52,7 +55,14 @@ class ModelPermission(object):
return results
else:
return cls._registry.get(klass, ())
# Return the permissions for the klass and the models that
# inherit from it.
result = []
result.extend(cls._registry.get(klass, ()))
for model in cls._inheritances_reverse.get(klass, ()):
result.extend(cls._registry.get(model, ()))
return result
@classmethod
def get_for_instance(cls, instance):
@@ -124,6 +134,12 @@ class ModelPermission(object):
@classmethod
def register_inheritance(cls, model, related):
model_reverse = get_related_field(
model=model, related_field_name=related
).related_model
cls._inheritances_reverse.setdefault(model_reverse, [])
cls._inheritances_reverse[model_reverse].append(model)
cls._inheritances[model] = related
@classmethod

View File

@@ -8,7 +8,7 @@ from ..permissions import permission_acl_edit, permission_acl_view
from .mixins import ACLTestMixin
class AccessControlListViewTestCase(ACLTestMixin, GenericViewTestCase):
class AccessControlListViewTestMixin(object):
def _request_test_acl_create_get_view(self):
return self.get(
viewname='acls:acl_create',
@@ -17,6 +17,18 @@ class AccessControlListViewTestCase(ACLTestMixin, GenericViewTestCase):
}
)
def _request_test_acl_create_post_view(self):
return self.post(
viewname='acls:acl_create',
kwargs=self.test_content_object_view_kwargs, data={
'role': self.test_role.pk
}
)
class AccessControlListViewTestCase(
AccessControlListViewTestMixin, ACLTestMixin, GenericViewTestCase
):
def test_acl_create_get_view_no_permission(self):
self._setup_test_object()
@@ -40,14 +52,6 @@ class AccessControlListViewTestCase(ACLTestMixin, GenericViewTestCase):
self.assertEqual(AccessControlList.objects.count(), acl_count)
def _request_test_acl_create_post_view(self):
return self.post(
viewname='acls:acl_create',
kwargs=self.test_content_object_view_kwargs, data={
'role': self.test_role.pk
}
)
def test_acl_create_view_post_no_permission(self):
self._setup_test_object()

View File

@@ -85,7 +85,6 @@ class DocumentIndexingApp(MayanAppConfig):
ModelPermission.register(
model=Index, permissions=(
permission_acl_edit, permission_acl_view,
permission_document_indexing_create,
permission_document_indexing_delete,
permission_document_indexing_edit,
permission_document_indexing_instance_view,

View File

@@ -219,15 +219,7 @@ class DocumentsApp(MayanAppConfig):
permission_document_create, permission_document_type_delete,
permission_document_type_edit, permission_document_type_view,
permission_acl_edit, permission_acl_view,
permission_document_delete, permission_document_download,
permission_document_edit, permission_document_new_version,
permission_document_print, permission_document_properties_edit,
permission_document_restore, permission_document_trash,
permission_document_version_revert,
permission_document_version_view, permission_document_view,
permission_events_view, permission_transformation_create,
permission_transformation_delete,
permission_transformation_edit, permission_transformation_view,
permission_events_view,
)
)

View File

@@ -0,0 +1,38 @@
from __future__ import unicode_literals
from mayan.apps.acls.classes import ModelPermission
from mayan.apps.acls.permissions import permission_acl_edit
from mayan.apps.acls.tests.mixins import ACLTestMixin
from mayan.apps.common.tests import BaseTestCase
from ..models import DocumentType
from ..permissions import permission_document_view
from .base import GenericDocumentViewTestCase
class DocumentTypeACLPermissionsTestCase(BaseTestCase):
def test_document_type_permission_test(self):
result = ModelPermission.get_for_class(klass=DocumentType)
self.assertTrue(permission_document_view in result)
class DocumentTypeACLPermissionsViewTestCase(
ACLTestMixin, GenericDocumentViewTestCase
):
auto_upload_document = False
def test_document_type_acl_permission_view_test(self):
self.test_object = self.test_document_type
self._create_test_acl()
self.grant_access(
obj=self.test_object, permission=permission_acl_edit
)
response = self.get(
viewname='acls:acl_permissions', kwargs={'pk': self.test_acl.pk}
)
self.assertContains(
response=response, text=permission_document_view.label,
status_code=200
)