mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 05:04:31 +03:00
Add object permissions tests.
This commit is contained in:
parent
870f10486c
commit
baacdd821f
|
@ -107,3 +107,49 @@ class ModelPermissionsIntegrationTests(TestCase):
|
||||||
HTTP_AUTHORIZATION=self.updateonly_credentials)
|
HTTP_AUTHORIZATION=self.updateonly_credentials)
|
||||||
response = instance_view(request, pk='2')
|
response = instance_view(request, pk='2')
|
||||||
self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)
|
self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
|
||||||
|
class OwnerModel(models.Model):
|
||||||
|
text = models.CharField(max_length=100)
|
||||||
|
owner = models.ForeignKey(User)
|
||||||
|
|
||||||
|
|
||||||
|
class IsOwnerPermission(permissions.BasePermission):
|
||||||
|
def has_permission(self, request, view, obj=None):
|
||||||
|
if not obj:
|
||||||
|
return True
|
||||||
|
return request.user == obj.owner
|
||||||
|
|
||||||
|
|
||||||
|
class OwnerInstanceView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
model = OwnerModel
|
||||||
|
authentication_classes = [authentication.BasicAuthentication]
|
||||||
|
permission_classes = [IsOwnerPermission]
|
||||||
|
|
||||||
|
|
||||||
|
owner_instance_view = OwnerInstanceView.as_view()
|
||||||
|
|
||||||
|
|
||||||
|
class ObjectPermissionsIntegrationTests(TestCase):
|
||||||
|
"""
|
||||||
|
Integration tests for the object level permissions API.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
User.objects.create_user('not_owner', 'not_owner@example.com', 'password')
|
||||||
|
user = User.objects.create_user('owner', 'owner@example.com', 'password')
|
||||||
|
|
||||||
|
self.not_owner_credentials = basic_auth_header('not_owner', 'password')
|
||||||
|
self.owner_credentials = basic_auth_header('owner', 'password')
|
||||||
|
|
||||||
|
OwnerModel(text='foo', owner=user).save()
|
||||||
|
|
||||||
|
def test_owner_has_delete_permissions(self):
|
||||||
|
request = factory.delete('/1', HTTP_AUTHORIZATION=self.owner_credentials)
|
||||||
|
response = owner_instance_view(request, pk='1')
|
||||||
|
self.assertEquals(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
def test_non_owner_does_not_have_delete_permissions(self):
|
||||||
|
request = factory.delete('/1', HTTP_AUTHORIZATION=self.not_owner_credentials)
|
||||||
|
response = owner_instance_view(request, pk='1')
|
||||||
|
self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user