Skip to content

Commit 5428c4b

Browse files
authored
Ensure checking application privileges work with nested-limited roles (#96970)
This PR makes sure checkApplicationResourcePrivileges works when any of the baseRole and limitedByRole is itself a LimitedRole. Relates: #95170, #93306
1 parent c0a9b67 commit 5428c4b

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

docs/changelog/96970.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 96970
2+
summary: Ensure checking application privileges work with nested-limited roles
3+
area: Authorization
4+
type: enhancement
5+
issues: []

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/permission/LimitedRole.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -305,26 +305,24 @@ public boolean checkApplicationResourcePrivileges(
305305
Collection<ApplicationPrivilegeDescriptor> storedPrivileges,
306306
@Nullable ResourcePrivilegesMap.Builder resourcePrivilegesMapBuilder
307307
) {
308-
boolean baseRoleCheck = baseRole.application()
309-
.checkResourcePrivileges(
310-
applicationName,
311-
checkForResources,
312-
checkForPrivilegeNames,
313-
storedPrivileges,
314-
resourcePrivilegesMapBuilder
315-
);
308+
boolean baseRoleCheck = baseRole.checkApplicationResourcePrivileges(
309+
applicationName,
310+
checkForResources,
311+
checkForPrivilegeNames,
312+
storedPrivileges,
313+
resourcePrivilegesMapBuilder
314+
);
316315
if (false == baseRoleCheck && null == resourcePrivilegesMapBuilder) {
317316
// short-circuit only if not interested in the detailed individual check results
318317
return false;
319318
}
320-
boolean limitedByRoleCheck = limitedByRole.application()
321-
.checkResourcePrivileges(
322-
applicationName,
323-
checkForResources,
324-
checkForPrivilegeNames,
325-
storedPrivileges,
326-
resourcePrivilegesMapBuilder
327-
);
319+
boolean limitedByRoleCheck = limitedByRole.checkApplicationResourcePrivileges(
320+
applicationName,
321+
checkForResources,
322+
checkForPrivilegeNames,
323+
storedPrivileges,
324+
resourcePrivilegesMapBuilder
325+
);
328326
return baseRoleCheck && limitedByRoleCheck;
329327
}
330328

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authz/permission/LimitedRoleTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,15 @@ public void testGetApplicationPrivilegesByResource() {
903903
.addApplicationPrivilege(app2Write, Collections.singleton("moo/bar/*"))
904904
.build();
905905

906+
if (randomBoolean()) {
907+
final Role nestedLimitedRole = Role.builder(EMPTY_RESTRICTED_INDICES, "nested-limited-role")
908+
.addApplicationPrivilege(app1Read, Set.of("*"))
909+
.addApplicationPrivilege(app2Read, Set.of("*"))
910+
.addApplicationPrivilege(app2Write, Set.of("*"))
911+
.build();
912+
limitedByRole = randomBoolean() ? limitedByRole.limitedBy(nestedLimitedRole) : nestedLimitedRole.limitedBy(limitedByRole);
913+
}
914+
906915
verifyResourcesPrivileges(
907916
limitedByRole,
908917
"app1",

0 commit comments

Comments
 (0)