Ролевое представление в VAADIN 7
У меня есть приложение Vaadin 7, работающее с Spring, и в настоящее время есть одна роль ADMIN, которая может войти в систему и просмотреть все представления. Теперь мне нужно добавить еще одну роль, скажем, CO_ADMIN и позволить пользователю с этой ролью просматривать часть представлений. Каков наилучший способ достичь этого?
Спасибо
1 ответ
Если вы используете Spring Security, вы можете создать вспомогательный класс с помощью следующих методов:
public static boolean hasRole(String role) {
return getPrincipal().getAuthorities().contains(new SimpleGrantedAuthority(role));
}
public static UserDetails getPrincipal() {
return (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
Затем вы можете определить, какие роли нужны каждой части вашего представления программно:
Panel panel = new Panel("securedpanel");
if (SecurityUtils.hasRole("ADMIN")) {
//panel.setVisible(false);
panel.setEnabled(false);
}
Если вы хотите защитить весь вид, вы можете включить @Secured
аннотация в весеннем конфиге безопасности xml:
<global-method-security secured-annotations="enabled" />
С @Secured
включен, вы можете комментировать свои взгляды, как это:
@Secured("{ADMIN}")
Таким образом, если пользователь переходит к представлению, он отвечает с отклоненным разрешением 403. Вы можете расширить свой навигатор, чтобы справиться с этим, перенаправив в другое представление или определив обработчик ошибок для своего приложения.