Ролевое представление в 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. Вы можете расширить свой навигатор, чтобы справиться с этим, перенаправив в другое представление или определив обработчик ошибок для своего приложения.

Другие вопросы по тегам