@@ -799,6 +799,8 @@ export class ReviewService {
799799
800800 await this . ensureChallengeWhitelistAccess ( requester , challengeId ) ;
801801
802+ const isRequesterAdmin = isAdmin ( requester ) ;
803+
802804 if ( requester . isMachine ) {
803805 return {
804806 mode : 'machine' ,
@@ -810,17 +812,6 @@ export class ReviewService {
810812 } ;
811813 }
812814
813- if ( isAdmin ( requester ) ) {
814- return {
815- mode : 'admin' ,
816- hasReviewerRole : false ,
817- hasCopilotRole : false ,
818- ownsReview : false ,
819- requiresManagerComment : true ,
820- requesterResources : [ ] ,
821- } ;
822- }
823-
824815 const normalizedRoles = Array . isArray ( requester . roles )
825816 ? requester . roles . map ( ( role ) => String ( role ) . trim ( ) . toLowerCase ( ) )
826817 : [ ] ;
@@ -840,7 +831,7 @@ export class ReviewService {
840831 ? 'delete'
841832 : 'update' ;
842833
843- if ( ! hasReviewerRole && ! hasCopilotRole ) {
834+ if ( ! hasReviewerRole && ! hasCopilotRole && ! isRequesterAdmin ) {
844835 throw new ForbiddenException ( {
845836 message : `You do not have permission to ${ actionVerb } this review item.` ,
846837 code : `REVIEW_ITEM_${ context . action . toUpperCase ( ) } _FORBIDDEN_ROLE` ,
@@ -891,6 +882,38 @@ export class ReviewService {
891882 } ) ;
892883 }
893884
885+ if ( isRequesterAdmin ) {
886+ const isAssignedReviewerRole = requesterResources . some ( ( resource ) => {
887+ const normalizedRoleName = ( resource . roleName || '' ) . toLowerCase ( ) ;
888+ const matchesReviewer = normalizedRoleName . includes ( 'reviewer' ) ;
889+ const matchesChallenge = challengeId
890+ ? resource . challengeId === challengeId
891+ : false ;
892+ return matchesReviewer && matchesChallenge ;
893+ } ) ;
894+
895+ return {
896+ mode : 'admin' ,
897+ hasReviewerRole,
898+ hasCopilotRole,
899+ ownsReview : false ,
900+ requiresManagerComment : ! isAssignedReviewerRole ,
901+ requesterResources,
902+ } ;
903+ }
904+
905+ if ( ! hasReviewerRole && ! hasCopilotRole ) {
906+ throw new ForbiddenException ( {
907+ message : `You do not have permission to ${ actionVerb } this review item.` ,
908+ code : `REVIEW_ITEM_${ context . action . toUpperCase ( ) } _FORBIDDEN_ROLE` ,
909+ details : {
910+ reviewId : review . id ,
911+ itemId : context . itemId ,
912+ requesterRoles : requester . roles ,
913+ } ,
914+ } ) ;
915+ }
916+
894917 let ownsReview = false ;
895918 let mode : ReviewItemAccessMode | null = null ;
896919 let hasCopilotAccess = false ;
0 commit comments