diff --git a/apps/acls/utils.py b/apps/acls/utils.py new file mode 100644 index 0000000000..4da462d7c7 --- /dev/null +++ b/apps/acls/utils.py @@ -0,0 +1,27 @@ +from __future__ import absolute_import + +from django.contrib.contenttypes.models import ContentType + +from .models import AccessEntry, DefaultAccessEntry, CreatorSingleton +from .classes import EncapsulatedObject, AccessHolder, ClassAccessHolder + + +def apply_default_acls(self, obj, actor=None): + if isinstance(obj, EncapsulatedObject): + obj = obj.source_object + + if actor: + actor = AnonymousUserSingleton.objects.passthru_check(actor) + #actor_type = ContentType.objects.get_for_model(actor) + + content_type = ContentType.objects.get_for_model(obj) + + for default_acl in DefaultAccessEntry.objects.filter(content_type=content_type): + holder = CreatorSingleton.objects.passthru_check(default_acl.holder_object, actor) + + access_entry = AccessEntry( + permission=default_acl.permission, + holder_object=holder, + content_object=obj, + ) + access_entry.save() diff --git a/apps/sources/models.py b/apps/sources/models.py index 52e828a4fe..d6a997daf9 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -17,6 +17,7 @@ from history.api import create_history from metadata.models import MetadataType from metadata.api import save_metadata_list from scheduler.api import register_interval_job, remove_job +from acls.utils import apply_default_acls from .managers import SourceTransformationManager from .literals import (SOURCE_CHOICES, SOURCE_CHOICES_PLURAL, @@ -76,6 +77,8 @@ class BaseModel(models.Model): document.document_type = document_type document.save() + apply_default_acls(document, document, user) + if metadata_dict_list: save_metadata_list(metadata_dict_list, document, create=True) warnings = update_indexes(document)