Skip to content

Commit e9c6f4f

Browse files
authored
Use specific, non-admin permission for 2nd level approval queue (#23538)
* Use specific, non-admin permission for 2nd level approval queue
1 parent 5f2c2cc commit e9c6f4f

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

src/olympia/constants/permissions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
ADDONS_TRIAGE_DELAYED = AclPermission('Addons', 'TriageDelayed')
5050
# Can see add-ons with all due dates in the queue, rather than just upcoming ones
5151
ADDONS_ALL_DUE_DATES = AclPermission('Addons', 'AllDueDates')
52+
# Can view/make choices in 2nd level approval queue
53+
ADDONS_HIGH_IMPACT_APPROVE = AclPermission('Addons', 'HighImpactApprove')
5254

5355
# Can edit all collections.
5456
COLLECTIONS_EDIT = AclPermission('Collections', 'Edit')

src/olympia/reviewers/tests/test_views.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ def test_not_a_reviewer(self):
621621
response = self.client.get(self.url)
622622
assert response.status_code == 403
623623

624-
def test_admin_all_permissions(self):
624+
def test_super_admin_all_permissions(self):
625625
# Create a lot of add-ons to test the queue counts.
626626
user_factory(pk=settings.TASK_USER_ID)
627627
# Recommended extensions
@@ -679,8 +679,6 @@ def test_admin_all_permissions(self):
679679
AutoApprovalSummary.objects.create(
680680
version=addon1.current_version, verdict=amo.AUTO_APPROVED
681681
)
682-
admins_group = Group.objects.create(name='Admins', rules='*:*')
683-
GroupUser.objects.create(user=self.user, group=admins_group)
684682

685683
# Pending addon
686684
addon_factory(name='Pending Addön', status=amo.STATUS_NOMINATED)
@@ -725,10 +723,13 @@ def test_admin_all_permissions(self):
725723
action=DECISION_ACTIONS.AMO_DISABLE_ADDON, addon=addon1
726724
)
727725

726+
admins_group = Group.objects.create(name='Admins', rules='*:*')
727+
GroupUser.objects.create(user=self.user, group=admins_group)
728+
728729
response = self.client.get(self.url)
729730
assert response.status_code == 200
730731
doc = pq(response.content)
731-
assert len(doc('.dashboard h3')) == 7 # All sections are present.
732+
assert len(doc('.dashboard h3')) == 8 # All sections are present.
732733
expected_links = [
733734
reverse('reviewers.queue_extension'),
734735
reverse('reviewers.reviewlog'),
@@ -766,7 +767,7 @@ def test_can_see_all_through_reviewer_view_all_permission(self):
766767
response = self.client.get(self.url)
767768
assert response.status_code == 200
768769
doc = pq(response.content)
769-
assert len(doc('.dashboard h3')) == 7 # All sections are present.
770+
assert len(doc('.dashboard h3')) == 8 # All sections are present.
770771
expected_links = [
771772
reverse('reviewers.queue_extension'),
772773
reverse('reviewers.reviewlog'),
@@ -7957,9 +7958,10 @@ def setUp(self):
79577958
name='Approve',
79587959
enforcement_actions=[DECISION_ACTIONS.AMO_APPROVE.api_value],
79597960
)
7960-
# CinderJob.objects.create(cinder)
79617961
self.url = reverse('reviewers.decision_review', args=(self.decision.id,))
7962-
self.login_as_admin()
7962+
self.user = user_factory()
7963+
self.grant_permission(self.user, 'Addons:HighImpactApprove')
7964+
self.client.force_login(self.user)
79637965

79647966
def _test_review_page_addon(self):
79657967
response = self.client.get(self.url)
@@ -8123,7 +8125,7 @@ def test_approve_user_instead(self):
81238125
self.assertCloseToNow(override.action_date)
81248126
assert override.override_of == self.decision
81258127

8126-
def test_non_admin_cannot_access(self):
8128+
def test_non_second_level_approver_cannot_access(self):
81278129
self.login_as_reviewer()
81288130
response = self.client.get(self.url)
81298131
assert response.status_code == 403

src/olympia/reviewers/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,11 @@ def dashboard(request):
271271
),
272272
reverse('reviewers.queue_pending_rejection'),
273273
),
274+
]
275+
if view_all or acl.action_allowed_for(
276+
request.user, amo.permissions.ADDONS_HIGH_IMPACT_APPROVE
277+
):
278+
sections['2nd Level Approval'] = [
274279
(
275280
'Held Decisions for 2nd Level Approval ({0})'.format(
276281
queue_counts['queue_decisions']
@@ -1265,7 +1270,7 @@ def queue_decisions(request, tab):
12651270
)
12661271

12671272

1268-
@permission_or_tools_listed_view_required(amo.permissions.REVIEWS_ADMIN)
1273+
@permission_or_tools_listed_view_required(amo.permissions.ADDONS_HIGH_IMPACT_APPROVE)
12691274
def decision_review(request, decision_id):
12701275
decision = get_object_or_404(ContentDecision, pk=decision_id)
12711276
form = HeldDecisionReviewForm(

0 commit comments

Comments
 (0)