Skip to content

Commit 6d3db4c

Browse files
committed
Enable superuser to delete user annotations
1 parent 6fec0e3 commit 6d3db4c

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

app/api/permissions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ def test_func(self):
3434
class IsOwnAnnotation(ProjectMixin, BasePermission):
3535

3636
def has_permission(self, request, view):
37+
if request.user.is_superuser:
38+
return True
39+
3740
project_id = self.get_project_id(request, view)
3841
annotation_id = view.kwargs.get('annotation_id')
3942
project = get_object_or_404(Project, pk=project_id)

app/api/tests/test_api.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,12 +674,18 @@ class TestAnnotationDetailAPI(APITestCase):
674674

675675
@classmethod
676676
def setUpTestData(cls):
677+
cls.super_user_name = 'super_user_name'
678+
cls.super_user_pass = 'super_user_pass'
677679
cls.project_member_name = 'project_member_name'
678680
cls.project_member_pass = 'project_member_pass'
679681
cls.another_project_member_name = 'another_project_member_name'
680682
cls.another_project_member_pass = 'another_project_member_pass'
681683
cls.non_project_member_name = 'non_project_member_name'
682684
cls.non_project_member_pass = 'non_project_member_pass'
685+
# Todo: change super_user to project_admin.
686+
super_user = User.objects.create_superuser(username=cls.super_user_name,
687+
password=cls.super_user_pass,
688+
683689
create_default_roles()
684690
project_member = User.objects.create_user(username=cls.project_member_name,
685691
password=cls.project_member_pass)
@@ -689,7 +695,7 @@ def setUpTestData(cls):
689695
password=cls.non_project_member_pass)
690696

691697
main_project = mommy.make('SequenceLabelingProject',
692-
users=[project_member, another_project_member])
698+
users=[super_user, project_member, another_project_member])
693699
main_project_doc = mommy.make('Document', project=main_project)
694700
main_project_entity = mommy.make('SequenceAnnotation',
695701
document=main_project_doc, user=project_member)
@@ -746,6 +752,12 @@ def test_disallows_project_member_to_update_annotation_of_another_member(self):
746752
response = self.client.patch(self.another_url, format='json', data=self.post_data)
747753
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
748754

755+
def test_allows_superuser_to_delete_annotation_of_another_member(self):
756+
self.client.login(username=self.super_user_name,
757+
password=self.super_user_pass)
758+
response = self.client.delete(self.another_url, format='json', data=self.post_data)
759+
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
760+
749761
def test_allows_project_member_to_delete_annotation(self):
750762
self.client.login(username=self.project_member_name,
751763
password=self.project_member_pass)

0 commit comments

Comments
 (0)