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:
@@ -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)
|
||||
===================
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
38
mayan/apps/documents/tests/test_permissions.py
Normal file
38
mayan/apps/documents/tests/test_permissions.py
Normal 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
|
||||
)
|
||||
Reference in New Issue
Block a user