Draft: feat: enable granular PATs for MR approvals
Relates to issue #583249
Changes
This MR implements granular Personal Access Token (PAT) permissions for all 5 Merge Request Approvals REST API endpoints as specified in the issue.
Permission YAML Files Created
-
config/authz/permissions/merge_request_approval/read.yml- Permission for reading merge request approvals -
config/authz/permissions/merge_request_approval/approve.yml- Permission for approving merge requests
Authorization Decorators Added to Endpoints
CE Endpoints (lib/api/merge_request_approvals.rb):
-
GET /approvals- Addedread_merge_request_approvalpermission -
POST /approve- Addedapprove_merge_requestpermission -
POST /unapprove- Addedapprove_merge_requestpermission -
PUT /reset_approvals- Addedapprove_merge_requestpermission
EE Endpoint (ee/lib/ee/api/merge_request_approvals.rb):
-
GET /approval_state- Addedread_merge_request_approvalpermission
Test Coverage Added
CE Tests (spec/requests/api/merge_request_approvals_spec.rb):
- Test for
GET /approvalsendpoint - Test for
POST /approveendpoint - Test for
POST /unapproveendpoint - Test for
PUT /reset_approvalsendpoint
EE Test (ee/spec/requests/api/merge_request_approvals_spec.rb):
- Test for
GET /approval_stateendpoint
All tests use the shared example 'authorizing granular token permissions' pattern following GitLab's testing conventions.
Permission Design
Two permissions were created following GitLab's authorization conventions:
-
read_merge_request_approval- Used by both GET endpoints (/approvalsand/approval_state) -
approve_merge_request- Used by all write operations (/approve,/unapprove,/reset_approvals)
Both permissions are scoped to the project boundary with feature category source_code_management.
Files Modified
-
config/authz/permissions/merge_request_approval/read.yml(created) -
config/authz/permissions/merge_request_approval/approve.yml(created) -
lib/api/merge_request_approvals.rb(4 route_setting decorators added) -
ee/lib/ee/api/merge_request_approvals.rb(1 route_setting decorator added) -
spec/requests/api/merge_request_approvals_spec.rb(4 test cases added) -
ee/spec/requests/api/merge_request_approvals_spec.rb(1 test case added)
Edited by Matthew MacRae-Bovell