Add hasAll(Roles|Authorities) to SecurityExpressionRoot
This adds support for hasAllRoles and hasAllAuthorities to method security expressions. Issue gh-17932
This commit is contained in:
+6
@@ -93,6 +93,12 @@ public interface MethodSecurityService {
|
||||
@PreAuthorize("hasRole('USER')")
|
||||
void preAuthorizeUser();
|
||||
|
||||
@PreAuthorize("hasAllRoles('USER', 'ADMIN')")
|
||||
void hasAllRolesUserAdmin();
|
||||
|
||||
@PreAuthorize("hasAllAuthorities('ROLE_USER', 'ROLE_ADMIN')")
|
||||
void hasAllAuthoritiesRoleUserRoleAdmin();
|
||||
|
||||
@PreAuthorize("hasPermission(#object,'read')")
|
||||
String hasPermission(String object);
|
||||
|
||||
|
||||
+8
@@ -203,4 +203,12 @@ public class MethodSecurityServiceImpl implements MethodSecurityService {
|
||||
return "ok";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hasAllRolesUserAdmin() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hasAllAuthoritiesRoleUserRoleAdmin() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+46
@@ -282,6 +282,52 @@ public class PrePostMethodSecurityConfigurationTests {
|
||||
verify(strategy, atLeastOnce()).getContext();
|
||||
}
|
||||
|
||||
@WithMockUser(roles = { "ADMIN", "USER" })
|
||||
@Test
|
||||
public void hasAllAuthoritiesRoleUserRoleAdminWhenGranted() {
|
||||
this.spring.register(MethodSecurityServiceConfig.class).autowire();
|
||||
this.methodSecurityService.hasAllAuthoritiesRoleUserRoleAdmin();
|
||||
}
|
||||
|
||||
@WithMockUser(roles = { "USER" })
|
||||
@Test
|
||||
public void hasAllAuthoritiesRoleUserRoleAdminWhenMissingOneThenDenied() {
|
||||
this.spring.register(MethodSecurityServiceConfig.class).autowire();
|
||||
assertThatExceptionOfType(AccessDeniedException.class)
|
||||
.isThrownBy(this.methodSecurityService::hasAllAuthoritiesRoleUserRoleAdmin);
|
||||
}
|
||||
|
||||
@WithMockUser(roles = { "OTHER" })
|
||||
@Test
|
||||
public void hasAllAuthoritiesRoleUserRoleAdminWhenAllThenDenied() {
|
||||
this.spring.register(MethodSecurityServiceConfig.class).autowire();
|
||||
assertThatExceptionOfType(AccessDeniedException.class)
|
||||
.isThrownBy(this.methodSecurityService::hasAllAuthoritiesRoleUserRoleAdmin);
|
||||
}
|
||||
|
||||
@WithMockUser(roles = { "ADMIN", "USER" })
|
||||
@Test
|
||||
public void hasAllRolesRoleUserRoleAdminWhenGranted() {
|
||||
this.spring.register(MethodSecurityServiceConfig.class).autowire();
|
||||
this.methodSecurityService.hasAllRolesUserAdmin();
|
||||
}
|
||||
|
||||
@WithMockUser(roles = { "USER" })
|
||||
@Test
|
||||
public void hasAllRolesRoleUserRoleAdminWhenMissingOneThenDenied() {
|
||||
this.spring.register(MethodSecurityServiceConfig.class).autowire();
|
||||
assertThatExceptionOfType(AccessDeniedException.class)
|
||||
.isThrownBy(this.methodSecurityService::hasAllRolesUserAdmin);
|
||||
}
|
||||
|
||||
@WithMockUser(roles = { "OTHER" })
|
||||
@Test
|
||||
public void hasAllRolesRoleUserRoleAdminWhenAllThenDenied() {
|
||||
this.spring.register(MethodSecurityServiceConfig.class).autowire();
|
||||
assertThatExceptionOfType(AccessDeniedException.class)
|
||||
.isThrownBy(this.methodSecurityService::hasAllRolesUserAdmin);
|
||||
}
|
||||
|
||||
@WithMockUser(authorities = "PREFIX_ADMIN")
|
||||
@Test
|
||||
public void preAuthorizeAdminWhenRoleAdminAndCustomPrefixThenPasses() {
|
||||
|
||||
Reference in New Issue
Block a user