1
0
mirror of https://github.com/django/django.git synced 2025-02-08 08:26:13 +00:00

Refs #8936 -- Added ModelAdmin.has_view_or_change_permission().

This commit is contained in:
Jon Dufresne 2018-08-16 06:49:06 -07:00 committed by Tim Graham
parent dd3feb0891
commit cd790ed1a6

View File

@ -518,6 +518,9 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
request.user.has_perm('%s.%s' % (opts.app_label, codename_change)) request.user.has_perm('%s.%s' % (opts.app_label, codename_change))
) )
def has_view_or_change_permission(self, request, obj=None):
return self.has_view_permission(request, obj) or self.has_change_permission(request, obj)
def has_module_permission(self, request): def has_module_permission(self, request):
""" """
Return True if the given request has any permission in the given Return True if the given request has any permission in the given
@ -588,9 +591,8 @@ class ModelAdmin(BaseModelAdmin):
else: else:
inline_has_add_permission = inline.has_add_permission(request) inline_has_add_permission = inline.has_add_permission(request)
if request: if request:
if not (inline.has_view_permission(request, obj) or if not (inline.has_view_or_change_permission(request, obj) or
inline_has_add_permission or inline_has_add_permission or
inline.has_change_permission(request, obj) or
inline.has_delete_permission(request, obj)): inline.has_delete_permission(request, obj)):
continue continue
if not inline_has_add_permission: if not inline_has_add_permission:
@ -1556,7 +1558,7 @@ class ModelAdmin(BaseModelAdmin):
else: else:
obj = self.get_object(request, unquote(object_id), to_field) obj = self.get_object(request, unquote(object_id), to_field)
if not self.has_view_permission(request, obj) and not self.has_change_permission(request, obj): if not self.has_view_or_change_permission(request, obj):
raise PermissionDenied raise PermissionDenied
if obj is None: if obj is None:
@ -1678,7 +1680,7 @@ class ModelAdmin(BaseModelAdmin):
from django.contrib.admin.views.main import ERROR_FLAG from django.contrib.admin.views.main import ERROR_FLAG
opts = self.model._meta opts = self.model._meta
app_label = opts.app_label app_label = opts.app_label
if not self.has_view_permission(request) and not self.has_change_permission(request): if not self.has_view_or_change_permission(request):
raise PermissionDenied raise PermissionDenied
try: try:
@ -1904,7 +1906,7 @@ class ModelAdmin(BaseModelAdmin):
if obj is None: if obj is None:
return self._get_obj_does_not_exist_redirect(request, model._meta, object_id) return self._get_obj_does_not_exist_redirect(request, model._meta, object_id)
if not self.has_view_permission(request, obj) and not self.has_change_permission(request, obj): if not self.has_view_or_change_permission(request, obj):
raise PermissionDenied raise PermissionDenied
# Then get the history for this object. # Then get the history for this object.
@ -2111,7 +2113,7 @@ class InlineModelAdmin(BaseModelAdmin):
def get_queryset(self, request): def get_queryset(self, request):
queryset = super().get_queryset(request) queryset = super().get_queryset(request)
if not self.has_change_permission(request) and not self.has_view_permission(request): if not self.has_view_or_change_permission(request):
queryset = queryset.none() queryset = queryset.none()
return queryset return queryset