From 9c950db518fa2210b4f7963ee954148aba68cfaf Mon Sep 17 00:00:00 2001 From: Ramiro Morales Date: Sat, 1 Jan 2011 00:37:38 +0000 Subject: [PATCH] Fixed #11124 -- Expanded docstrings of the ModelAdmin has_{change|delete}_permission methods to make it clear they can be overriden to implement per-instance permission checks. Refs #12642. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15126 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/options.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 0351ef65c1..6fd14d83d4 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -340,17 +340,23 @@ class ModelAdmin(BaseModelAdmin): media = property(_media) def has_add_permission(self, request): - "Returns True if the given request has permission to add an object." + """ + Returns True if the given request has permission to add an object. + Can be overriden by the user in subclasses. + """ opts = self.opts return request.user.has_perm(opts.app_label + '.' + opts.get_add_permission()) def has_change_permission(self, request, obj=None): """ Returns True if the given request has permission to change the given - Django model instance. + Django model instance, the default implementation doesn't examine the + `obj` parameter. - If `obj` is None, this should return True if the given request has - permission to change *any* object of the given type. + Can be overriden by the user in subclasses. In such case it should + return True if the given request has permission to change the `obj` + model instance. If `obj` is None, this should return True if the given + request has permission to change *any* object of the given type. """ opts = self.opts return request.user.has_perm(opts.app_label + '.' + opts.get_change_permission()) @@ -358,10 +364,13 @@ class ModelAdmin(BaseModelAdmin): def has_delete_permission(self, request, obj=None): """ Returns True if the given request has permission to change the given - Django model instance. + Django model instance, the default implementation doesn't examine the + `obj` parameter. - If `obj` is None, this should return True if the given request has - permission to delete *any* object of the given type. + Can be overriden by the user in subclasses. In such case it should + return True if the given request has permission to delete the `obj` + model instance. If `obj` is None, this should return True if the given + request has permission to delete *any* object of the given type. """ opts = self.opts return request.user.has_perm(opts.app_label + '.' + opts.get_delete_permission())