Вы можете использовать этот метод для этого, который принимает одну Роль и проверяет, содержат ли полномочия пользователей эту Роль.Он в основном делает то же самое, что и SecurityUtils.isAccessGranted (securedClass) , только он ищет определенную роль, а не роли, определенные в аннотации @Secured
представления.
public static boolean userHasRole(Role role){ // your own Role class/enum
Authentication userAuthentication = SecurityContextHolder.getContext().getAuthentication();
List<String> allowedRoles = Arrays.asList(role.name());
return userAuthentication.getAuthorities().stream().map(GrantedAuthority::getAuthority)
.anyMatch(allowedRoles::contains);
}
AХорошим местом для определения этого метода является уже упомянутый класс SecurityUtils
, если он у вас уже есть.Если нет, то сейчас самое время создать его;).
Теперь вы можете вызывать метод, как показано ниже:
if(SecurityUtils.userHasRole(Role.EDIT_PAGE)){
add(new Button("Edit"));
} else {
add(new Button("View"));
}
Если вы хотите, вы, конечно, можете изменить этот метод так, чтобы он принимал список ролей вместо одной.