diff --git a/rest_framework/permissions.py b/rest_framework/permissions.py index d1e84e0882..a0e740c139 100644 --- a/rest_framework/permissions.py +++ b/rest_framework/permissions.py @@ -151,7 +151,7 @@ class DjangoModelPermissions(BasePermission): # Override this if you need to also provide 'view' permissions, # or if you want to provide custom permission codes. perms_map = { - 'GET': [], + 'GET': ['%(app_label)s.view_%(model_name)s'], 'OPTIONS': [], 'HEAD': [], 'POST': ['%(app_label)s.add_%(model_name)s'], diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 46ca166c22..ebdc97d5f6 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -79,7 +79,8 @@ def setUp(self): user.user_permissions.set([ Permission.objects.get(codename='add_basicmodel'), Permission.objects.get(codename='change_basicmodel'), - Permission.objects.get(codename='delete_basicmodel') + Permission.objects.get(codename='delete_basicmodel'), + Permission.objects.get(codename='view_basicmodel'), ]) user = User.objects.create_user('updateonly', 'updateonly@example.com', 'password') @@ -117,6 +118,12 @@ def test_get_queryset_has_create_permissions(self): response = get_queryset_list_view(request, pk=1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) + def test_has_read_permissions(self): + request = factory.get('/', {'text': 'foobar'}, format='json', + HTTP_AUTHORIZATION=self.permitted_credentials) + response = root_view(request, pk=1) + self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_has_put_permissions(self): request = factory.put('/1', {'text': 'foobar'}, format='json', HTTP_AUTHORIZATION=self.permitted_credentials) @@ -134,6 +141,12 @@ def test_does_not_have_create_permissions(self): response = root_view(request, pk=1) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + def test_does_not_have_read_permissions(self): + request = factory.get('/', {'text': 'foobar'}, format='json', + HTTP_AUTHORIZATION=self.disallowed_credentials) + response = root_view(request, pk=1) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + def test_does_not_have_put_permissions(self): request = factory.put('/1', {'text': 'foobar'}, format='json', HTTP_AUTHORIZATION=self.disallowed_credentials)