From 95f56cbd5a66ff5dedaae6d6d697c4ad34cdcdb5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 21 Jan 2012 04:03:58 -0400 Subject: [PATCH] Enable default acls setup upon creation for documents, folders, tags and smart_links --- apps/acls/utils.py | 12 +++++++++--- apps/folders/views.py | 2 ++ apps/linking/views.py | 2 ++ apps/sources/models.py | 2 +- apps/tags/views.py | 2 ++ 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/acls/utils.py b/apps/acls/utils.py index 4da462d7c7..2d9c9a92e7 100644 --- a/apps/acls/utils.py +++ b/apps/acls/utils.py @@ -1,24 +1,30 @@ from __future__ import absolute_import +import logging + from django.contrib.contenttypes.models import ContentType +from common.models import AnonymousUserSingleton + from .models import AccessEntry, DefaultAccessEntry, CreatorSingleton from .classes import EncapsulatedObject, AccessHolder, ClassAccessHolder +logger = logging.getLogger(__name__) -def apply_default_acls(self, obj, actor=None): + +def apply_default_acls(obj, actor=None): + logger.debug('actor, init: %s' % actor) 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, diff --git a/apps/folders/views.py b/apps/folders/views.py index 0bd85d2790..3c4a494aa6 100644 --- a/apps/folders/views.py +++ b/apps/folders/views.py @@ -17,6 +17,7 @@ from permissions import Permission from common.utils import encapsulate from acls.models import AccessEntry from acls.views import acl_list_for +from acls.utils import apply_default_acls from .models import Folder from .forms import FolderForm, FolderListForm @@ -64,6 +65,7 @@ def folder_create(request): if form.is_valid(): folder, created = Folder.objects.get_or_create(user=request.user, title=form.cleaned_data['title']) if created: + apply_default_acls(folder, request.user) messages.success(request, _(u'Folder created successfully')) return HttpResponseRedirect(reverse('folder_list')) else: diff --git a/apps/linking/views.py b/apps/linking/views.py index 07e1d42351..2153e3c3fc 100644 --- a/apps/linking/views.py +++ b/apps/linking/views.py @@ -17,6 +17,7 @@ from documents.permissions import PERMISSION_DOCUMENT_VIEW from permissions.models import Permission from acls.views import acl_list_for from acls.models import AccessEntry, PermissionDenied +from acls.utils import apply_default_acls from .models import SmartLink, SmartLinkCondition from .conf.settings import SHOW_EMPTY_SMART_LINKS @@ -147,6 +148,7 @@ def smart_link_create(request): form = SmartLinkForm(request.POST) if form.is_valid(): document_group = form.save() + apply_default_acls(document_group, request.user) messages.success(request, _(u'Smart link: %s created successfully.') % document_group) return HttpResponseRedirect(reverse('document_group_list')) else: diff --git a/apps/sources/models.py b/apps/sources/models.py index d6a997daf9..d7fb8f7161 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -77,7 +77,7 @@ class BaseModel(models.Model): document.document_type = document_type document.save() - apply_default_acls(document, document, user) + apply_default_acls(document, user) if metadata_dict_list: save_metadata_list(metadata_dict_list, document, create=True) diff --git a/apps/tags/views.py b/apps/tags/views.py index 615c248829..712ecd86c9 100644 --- a/apps/tags/views.py +++ b/apps/tags/views.py @@ -17,6 +17,7 @@ from documents.permissions import PERMISSION_DOCUMENT_VIEW from common.utils import encapsulate from acls.models import AccessEntry, PermissionDenied from acls.views import acl_list_for, acl_new_holder_for +from acls.utils import apply_default_acls from .forms import TagListForm, TagForm from .models import TagProperties @@ -44,6 +45,7 @@ def tag_create(request): tag = Tag(name=tag_name) tag.save() TagProperties(tag=tag, color=form.cleaned_data['color']).save() + apply_default_acls(tag, request.user) messages.success(request, _(u'Tag created succesfully.')) return HttpResponseRedirect(redirect_url)