From 7f11a4fc95bc9d21f7d81b754fb1ca03cf1f443f Mon Sep 17 00:00:00 2001 From: John Montgomery Date: Wed, 18 Apr 2012 15:48:59 +0100 Subject: [PATCH] Added separate permission method for undelete Defaults to simply call has_publish_permission method, but can be overridden to have different behaviour if need be. e.g. state of objects means publishing should be block, but undelete should be allowed (or vice versa). --- publish/__init__.py | 2 +- publish/actions.py | 3 ++- publish/admin.py | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/publish/__init__.py b/publish/__init__.py index c0aa805..ced8013 100644 --- a/publish/__init__.py +++ b/publish/__init__.py @@ -1,2 +1,2 @@ -VERSION = (0, 3, 5) +VERSION = (0, 3, 6) __version__ = '.'.join(map(str, VERSION)) diff --git a/publish/actions.py b/publish/actions.py index f5df365..6996eb2 100644 --- a/publish/actions.py +++ b/publish/actions.py @@ -17,6 +17,7 @@ def _get_change_view_url(app_label, object_name, pk, levels_to_root): return '%s%s/%s/%s/' % ('../'*levels_to_root, app_label, object_name, quote(pk)) + def delete_selected(modeladmin, request, queryset): # wrap regular django delete_selected to check permissions for each object for obj in queryset: @@ -27,7 +28,7 @@ def delete_selected(modeladmin, request, queryset): def undelete_selected(modeladmin, request, queryset): for obj in queryset: - if not modeladmin.has_publish_permission(request, obj): + if not modeladmin.has_undelete_permission(request, obj): raise PermissionDenied for obj in queryset: obj.undelete() diff --git a/publish/admin.py b/publish/admin.py index dc93c42..2a66260 100644 --- a/publish/admin.py +++ b/publish/admin.py @@ -110,7 +110,10 @@ def has_delete_permission(self, request, obj=None): if obj and obj.is_public: return False return super(PublishableAdmin, self).has_delete_permission(request, obj) - + + def has_undelete_permission(self, request, obj=None): + return self.has_publish_permission(request, obj=obj) + def has_publish_permission(self, request, obj=None): opts = self.opts return request.user.has_perm(opts.app_label + '.' + opts.get_publish_permission())