Skip to content

Commit 9049a6b

Browse files
authored
Merge pull request doccano#398 from CatalystCode/bugfix/superuser-delete-annotation
Bugfix/Enable superuser to delete user annotations
2 parents d7bc355 + 6d3db4c commit 9049a6b

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
@@ -682,12 +682,18 @@ class TestAnnotationDetailAPI(APITestCase):
682682

683683
@classmethod
684684
def setUpTestData(cls):
685+
cls.super_user_name = 'super_user_name'
686+
cls.super_user_pass = 'super_user_pass'
685687
cls.project_member_name = 'project_member_name'
686688
cls.project_member_pass = 'project_member_pass'
687689
cls.another_project_member_name = 'another_project_member_name'
688690
cls.another_project_member_pass = 'another_project_member_pass'
689691
cls.non_project_member_name = 'non_project_member_name'
690692
cls.non_project_member_pass = 'non_project_member_pass'
693+
# Todo: change super_user to project_admin.
694+
super_user = User.objects.create_superuser(username=cls.super_user_name,
695+
password=cls.super_user_pass,
696+
691697
create_default_roles()
692698
project_member = User.objects.create_user(username=cls.project_member_name,
693699
password=cls.project_member_pass)
@@ -697,7 +703,7 @@ def setUpTestData(cls):
697703
password=cls.non_project_member_pass)
698704

699705
main_project = mommy.make('SequenceLabelingProject',
700-
users=[project_member, another_project_member])
706+
users=[super_user, project_member, another_project_member])
701707
main_project_doc = mommy.make('Document', project=main_project)
702708
main_project_entity = mommy.make('SequenceAnnotation',
703709
document=main_project_doc, user=project_member)
@@ -754,6 +760,12 @@ def test_disallows_project_member_to_update_annotation_of_another_member(self):
754760
response = self.client.patch(self.another_url, format='json', data=self.post_data)
755761
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
756762

763+
def test_allows_superuser_to_delete_annotation_of_another_member(self):
764+
self.client.login(username=self.super_user_name,
765+
password=self.super_user_pass)
766+
response = self.client.delete(self.another_url, format='json', data=self.post_data)
767+
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
768+
757769
def test_allows_project_member_to_delete_annotation(self):
758770
self.client.login(username=self.project_member_name,
759771
password=self.project_member_pass)

0 commit comments

Comments
 (0)