|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2024 the original author or authors. |
|
|
|
* Copyright 2002-2025 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -40,8 +40,7 @@ public class RoleHierarchyImplTests { |
|
|
|
public void testRoleHierarchyWithNullOrEmptyAuthorities() { |
|
|
|
public void testRoleHierarchyWithNullOrEmptyAuthorities() { |
|
|
|
List<GrantedAuthority> authorities0 = null; |
|
|
|
List<GrantedAuthority> authorities0 = null; |
|
|
|
List<GrantedAuthority> authorities1 = new ArrayList<>(); |
|
|
|
List<GrantedAuthority> authorities1 = new ArrayList<>(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B"); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B"); |
|
|
|
|
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(authorities0)).isNotNull(); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(authorities0)).isNotNull(); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(authorities0)).isEmpty(); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(authorities0)).isEmpty(); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(authorities1)).isNotNull(); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(authorities1)).isNotNull(); |
|
|
|
@ -53,8 +52,7 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> authorities0 = AuthorityUtils.createAuthorityList("ROLE_0"); |
|
|
|
List<GrantedAuthority> authorities0 = AuthorityUtils.createAuthorityList("ROLE_0"); |
|
|
|
List<GrantedAuthority> authorities1 = AuthorityUtils.createAuthorityList("ROLE_A"); |
|
|
|
List<GrantedAuthority> authorities1 = AuthorityUtils.createAuthorityList("ROLE_A"); |
|
|
|
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B"); |
|
|
|
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B"); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B"); |
|
|
|
|
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities0), authorities0)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities0), authorities0)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
@ -72,12 +70,11 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B", "ROLE_C"); |
|
|
|
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B", "ROLE_C"); |
|
|
|
List<GrantedAuthority> authorities3 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B", "ROLE_C", |
|
|
|
List<GrantedAuthority> authorities3 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B", "ROLE_C", |
|
|
|
"ROLE_D"); |
|
|
|
"ROLE_D"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C"); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C"); |
|
|
|
|
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities2)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities2)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C\nROLE_C > ROLE_D"); |
|
|
|
roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C\nROLE_C > ROLE_D"); |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities3)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities3)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
@ -94,8 +91,8 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> authoritiesOutput3 = AuthorityUtils.createAuthorityList("ROLE_C", "ROLE_D"); |
|
|
|
List<GrantedAuthority> authoritiesOutput3 = AuthorityUtils.createAuthorityList("ROLE_C", "ROLE_D"); |
|
|
|
List<GrantedAuthority> authoritiesInput4 = AuthorityUtils.createAuthorityList("ROLE_D"); |
|
|
|
List<GrantedAuthority> authoritiesInput4 = AuthorityUtils.createAuthorityList("ROLE_D"); |
|
|
|
List<GrantedAuthority> authoritiesOutput4 = AuthorityUtils.createAuthorityList("ROLE_D"); |
|
|
|
List<GrantedAuthority> authoritiesOutput4 = AuthorityUtils.createAuthorityList("ROLE_D"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B\nROLE_A > ROLE_C\nROLE_C > ROLE_D\nROLE_B > ROLE_D"); |
|
|
|
.fromHierarchy("ROLE_A > ROLE_B\nROLE_A > ROLE_C\nROLE_C > ROLE_D\nROLE_B > ROLE_D"); |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authoritiesInput1), authoritiesOutput1)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authoritiesInput1), authoritiesOutput1)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
@ -112,24 +109,22 @@ public class RoleHierarchyImplTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void testCyclesInRoleHierarchy() { |
|
|
|
public void testCyclesInRoleHierarchy() { |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
|
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
.isThrownBy(() -> roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_A")); |
|
|
|
.isThrownBy(() -> RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_A")); |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
.isThrownBy(() -> roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_A")); |
|
|
|
.isThrownBy(() -> RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_A")); |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
.isThrownBy(() -> roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C\nROLE_C > ROLE_A")); |
|
|
|
.isThrownBy(() -> RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C\nROLE_C > ROLE_A")); |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class).isThrownBy(() -> roleHierarchyImpl |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class).isThrownBy(() -> RoleHierarchyImpl |
|
|
|
.setHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C\nROLE_C > ROLE_E\nROLE_E > ROLE_D\nROLE_D > ROLE_B")); |
|
|
|
.fromHierarchy("ROLE_A > ROLE_B\nROLE_B > ROLE_C\nROLE_C > ROLE_E\nROLE_E > ROLE_D\nROLE_D > ROLE_B")); |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
assertThatExceptionOfType(CycleInRoleHierarchyException.class) |
|
|
|
.isThrownBy(() -> roleHierarchyImpl.setHierarchy("ROLE_C > ROLE_B\nROLE_B > ROLE_A\nROLE_A > ROLE_B")); |
|
|
|
.isThrownBy(() -> RoleHierarchyImpl.fromHierarchy("ROLE_C > ROLE_B\nROLE_B > ROLE_A\nROLE_A > ROLE_B")); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void testNoCyclesInRoleHierarchy() { |
|
|
|
public void testNoCyclesInRoleHierarchy() { |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
assertThatNoException().isThrownBy(() -> RoleHierarchyImpl |
|
|
|
assertThatNoException().isThrownBy(() -> roleHierarchyImpl |
|
|
|
.fromHierarchy("ROLE_A > ROLE_B\nROLE_A > ROLE_C\nROLE_C > ROLE_D\nROLE_B > ROLE_D")); |
|
|
|
.setHierarchy("ROLE_A > ROLE_B\nROLE_A > ROLE_C\nROLE_C > ROLE_D\nROLE_B > ROLE_D")); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// SEC-863
|
|
|
|
// SEC-863
|
|
|
|
@ -138,8 +133,7 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> authorities0 = HierarchicalRolesTestHelper.createAuthorityList("ROLE_0"); |
|
|
|
List<GrantedAuthority> authorities0 = HierarchicalRolesTestHelper.createAuthorityList("ROLE_0"); |
|
|
|
List<GrantedAuthority> authorities1 = HierarchicalRolesTestHelper.createAuthorityList("ROLE_A"); |
|
|
|
List<GrantedAuthority> authorities1 = HierarchicalRolesTestHelper.createAuthorityList("ROLE_A"); |
|
|
|
List<GrantedAuthority> authorities2 = HierarchicalRolesTestHelper.createAuthorityList("ROLE_A", "ROLE_B"); |
|
|
|
List<GrantedAuthority> authorities2 = HierarchicalRolesTestHelper.createAuthorityList("ROLE_A", "ROLE_B"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE_A > ROLE_B"); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B"); |
|
|
|
|
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthoritiesCompareByAuthorityString( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthoritiesCompareByAuthorityString( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities0), authorities0)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities0), authorities0)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
@ -157,12 +151,11 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE A", "ROLE B", "ROLE>C"); |
|
|
|
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE A", "ROLE B", "ROLE>C"); |
|
|
|
List<GrantedAuthority> authorities3 = AuthorityUtils.createAuthorityList("ROLE A", "ROLE B", "ROLE>C", |
|
|
|
List<GrantedAuthority> authorities3 = AuthorityUtils.createAuthorityList("ROLE A", "ROLE B", "ROLE>C", |
|
|
|
"ROLE D"); |
|
|
|
"ROLE D"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE A > ROLE B\nROLE B > ROLE>C"); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE A > ROLE B\nROLE B > ROLE>C"); |
|
|
|
|
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities2)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities2)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE A > ROLE B\nROLE B > ROLE>C\nROLE>C > ROLE D"); |
|
|
|
roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy("ROLE A > ROLE B\nROLE B > ROLE>C\nROLE>C > ROLE D"); |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
assertThat(HierarchicalRolesTestHelper.containTheSameGrantedAuthorities( |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities3)) |
|
|
|
roleHierarchyImpl.getReachableGrantedAuthorities(authorities1), authorities3)) |
|
|
|
.isTrue(); |
|
|
|
.isTrue(); |
|
|
|
@ -174,8 +167,7 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> flatAuthorities = AuthorityUtils.createAuthorityList("ROLE_A"); |
|
|
|
List<GrantedAuthority> flatAuthorities = AuthorityUtils.createAuthorityList("ROLE_A"); |
|
|
|
List<GrantedAuthority> allAuthorities = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B", |
|
|
|
List<GrantedAuthority> allAuthorities = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B", |
|
|
|
"ROLE_AUTHENTICATED", "ROLE_UNAUTHENTICATED"); |
|
|
|
"ROLE_AUTHENTICATED", "ROLE_UNAUTHENTICATED"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl.fromHierarchy( |
|
|
|
roleHierarchyImpl.setHierarchy( |
|
|
|
|
|
|
|
"ROLE_A > ROLE_B\n" + "ROLE_B > ROLE_AUTHENTICATED\n" + "ROLE_AUTHENTICATED > ROLE_UNAUTHENTICATED"); |
|
|
|
"ROLE_A > ROLE_B\n" + "ROLE_B > ROLE_AUTHENTICATED\n" + "ROLE_AUTHENTICATED > ROLE_UNAUTHENTICATED"); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(flatAuthorities)) |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(flatAuthorities)) |
|
|
|
.containsExactlyInAnyOrderElementsOf(allAuthorities); |
|
|
|
.containsExactlyInAnyOrderElementsOf(allAuthorities); |
|
|
|
@ -187,9 +179,8 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> flatAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST"); |
|
|
|
List<GrantedAuthority> flatAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST"); |
|
|
|
List<GrantedAuthority> allAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST", "ROLE_HIGHER", |
|
|
|
List<GrantedAuthority> allAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST", "ROLE_HIGHER", |
|
|
|
"ROLE_LOW", "ROLE_LOWER"); |
|
|
|
"ROLE_LOW", "ROLE_LOWER"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl |
|
|
|
roleHierarchyImpl |
|
|
|
.fromHierarchy("ROLE_HIGHEST > ROLE_HIGHER\n" + "ROLE_HIGHER > ROLE_LOW\n" + "ROLE_LOW > ROLE_LOWER"); |
|
|
|
.setHierarchy("ROLE_HIGHEST > ROLE_HIGHER\n" + "ROLE_HIGHER > ROLE_LOW\n" + "ROLE_LOW > ROLE_LOWER"); |
|
|
|
|
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(flatAuthorities)) |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(flatAuthorities)) |
|
|
|
.containsExactlyInAnyOrderElementsOf(allAuthorities); |
|
|
|
.containsExactlyInAnyOrderElementsOf(allAuthorities); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -200,8 +191,8 @@ public class RoleHierarchyImplTests { |
|
|
|
List<GrantedAuthority> flatAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST"); |
|
|
|
List<GrantedAuthority> flatAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST"); |
|
|
|
List<GrantedAuthority> allAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST", "ROLE_HIGHER", |
|
|
|
List<GrantedAuthority> allAuthorities = AuthorityUtils.createAuthorityList("ROLE_HIGHEST", "ROLE_HIGHER", |
|
|
|
"ROLE_LOW", "ROLE_LOWER"); |
|
|
|
"ROLE_LOW", "ROLE_LOWER"); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); |
|
|
|
RoleHierarchyImpl roleHierarchyImpl = RoleHierarchyImpl |
|
|
|
roleHierarchyImpl.setHierarchy("ROLE_HIGHEST > ROLE_HIGHER > ROLE_LOW > ROLE_LOWER"); |
|
|
|
.fromHierarchy("ROLE_HIGHEST > ROLE_HIGHER > ROLE_LOW > ROLE_LOWER"); |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(flatAuthorities)) |
|
|
|
assertThat(roleHierarchyImpl.getReachableGrantedAuthorities(flatAuthorities)) |
|
|
|
.containsExactlyInAnyOrderElementsOf(allAuthorities); |
|
|
|
.containsExactlyInAnyOrderElementsOf(allAuthorities); |
|
|
|
} |
|
|
|
} |
|
|
|
|