Skip to content

Commit 910fb72

Browse files
fix: allow elevated access for provisioner role (#5394)
1 parent 0fc2094 commit 910fb72

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

extensions/common/auth/auth-authorization-oauth2-lib/src/main/java/org/eclipse/edc/api/authorization/service/AuthorizationServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public ServiceResult<Void> authorize(SecurityContext securityContext, String res
4646
return ServiceResult.notFound("No Resource of type '%s' with ID '%s' was found for owner '%s'.".formatted(resourceClass, resourceId, resourceOwnerId));
4747
}
4848

49-
if (securityContext.isUserInRole(ParticipantPrincipal.ROLE_ADMIN)) {
49+
if (securityContext.isUserInRole(ParticipantPrincipal.ROLE_ADMIN) || securityContext.isUserInRole(ParticipantPrincipal.ROLE_PROVISIONER)) {
5050
return ServiceResult.success();
5151
}
5252

extensions/common/auth/auth-authorization-oauth2-lib/src/test/java/org/eclipse/edc/api/authorization/service/AuthorizationServiceImplTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@
1818
import org.eclipse.edc.participantcontext.spi.types.AbstractParticipantResource;
1919
import org.eclipse.edc.spi.result.ServiceFailure;
2020
import org.junit.jupiter.api.Test;
21+
import org.junit.jupiter.params.ParameterizedTest;
22+
import org.junit.jupiter.params.provider.ValueSource;
2123

2224
import java.security.Principal;
2325

2426
import static org.assertj.core.api.Assertions.assertThat;
2527
import static org.eclipse.edc.junit.assertions.AbstractResultAssert.assertThat;
28+
import static org.mockito.ArgumentMatchers.anyString;
2629
import static org.mockito.ArgumentMatchers.eq;
30+
import static org.mockito.Mockito.atLeastOnce;
2731
import static org.mockito.Mockito.mock;
2832
import static org.mockito.Mockito.verify;
2933
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -88,8 +92,9 @@ public String getParticipantContextId() {
8892
.isFailed();
8993
}
9094

91-
@Test
92-
void isAuthorized_whenRoleIsAdmin() {
95+
@ParameterizedTest
96+
@ValueSource(strings = { "admin", "provisioner" })
97+
void isAuthorized_whenRoleIsElevated(String role) {
9398
authorizationService.addLookupFunction(TestResource.class, (owner, id) -> new AbstractParticipantResource() {
9499
@Override
95100
public String getParticipantContextId() {
@@ -100,13 +105,12 @@ public String getParticipantContextId() {
100105
when(principal.getName()).thenReturn("test-id");
101106
var securityContext = mock(SecurityContext.class);
102107
when(securityContext.getUserPrincipal()).thenReturn(principal);
103-
104-
when(securityContext.isUserInRole(eq("admin"))).thenReturn(true);
108+
when(securityContext.isUserInRole(eq(role))).thenReturn(true);
105109

106110
assertThat(authorizationService.authorize(securityContext, "test-id", "test-resource-id", TestResource.class))
107111
.isSucceeded();
108112

109-
verify(securityContext).isUserInRole(eq("admin"));
113+
verify(securityContext, atLeastOnce()).isUserInRole(anyString());
110114
verify(securityContext).getUserPrincipal();
111115
verifyNoMoreInteractions(securityContext);
112116
}

0 commit comments

Comments
 (0)