diff --git a/django/contrib/admin/views/row_level_permissions.py b/django/contrib/admin/views/row_level_permissions.py index f7e1430f2f..6d63a9dbc2 100644 --- a/django/contrib/admin/views/row_level_permissions.py +++ b/django/contrib/admin/views/row_level_permissions.py @@ -29,7 +29,8 @@ def view_row_level_permissions(request, app_label, model_name, object_id): if not request.user.has_perm(opts.app_label + '.' + opts.get_change_permission(), object=model_instance): raise PermissionDenied - if not request.user.has_perm(RowLevelPermission._meta.app_label + '.' + RowLevelPermission._meta.get_change_permission()): + if not (request.user.has_perm(RowLevelPermission._meta.app_label + '.' + RowLevelPermission._meta.get_change_permission()) or + request.user.has_perm(RowLevelPermission._meta.app_label + '.' + RowLevelPermission._meta.get_add_permission())): raise PermissionDenied c = template.RequestContext(request, { @@ -40,6 +41,8 @@ def view_row_level_permissions(request, app_label, model_name, object_id): 'opts':opts, }) + + #Set up the paging list_per_page = RowLevelPermission._meta.admin.list_per_page paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'), list_per_page) @@ -67,7 +70,7 @@ def view_row_level_permissions(request, app_label, model_name, object_id): add_rlp_manip = AddRLPManipulator(model_instance, model_ct) edit_rlp_manip = ChangeRLPManipulator(model_ct) new_rlp_form = forms.FormWrapper(add_rlp_manip, rlp_new_data, rlp_errors) - + #3 different groups of forms when split by owner user_rlp_form_list = [] other_rlp_form_list = [] group_rlp_form_list = [] @@ -84,7 +87,7 @@ def view_row_level_permissions(request, app_label, model_name, object_id): group_rlp_form_list.append({'form':forms.FormWrapper(edit_rlp_manip, data, rlp_errors), 'rlp':r}) else: other_rlp_form_list.append({'form':forms.FormWrapper(edit_rlp_manip, data, rlp_errors), 'rlp':r}) - + #Combine together the three kinds rlp_forms = [] if user_rlp_form_list: rlp_forms.append((_('Users'), user_rlp_form_list,)) diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py index 3e0f616dbb..6c7e200ab5 100644 --- a/django/contrib/auth/models.py +++ b/django/contrib/auth/models.py @@ -338,6 +338,10 @@ class User(models.Model): return True def contains_permission(self, perm, model=None): + """ + This checks if the user has the given permission for any instance + of the given model. + """ if self.has_perm(perm): return True if model and model._meta.row_level_permissions: diff --git a/tests/modeltests/row_level_permissions/models.py b/tests/modeltests/row_level_permissions/models.py index 348bba45b2..18f69e26a9 100644 --- a/tests/modeltests/row_level_permissions/models.py +++ b/tests/modeltests/row_level_permissions/models.py @@ -143,5 +143,4 @@ True >>> user.has_perm(quartz._meta.app_label +"."+ perm.codename, quartz) False - """ \ No newline at end of file