Как ограничить функциональность пользователя - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно ограничить функциональность редактирования в моем приложении Vaadin 12, основываясь на назначенных пользователем ролях

В настоящее время у нас есть безопасность на уровне страниц, т.е. пользователь может видеть только страницы, основанные на назначенных ролях, например @Secured (Role.VIEW_PAGE)

Пользователь должен видеть кнопку просмотра, когда назначена роль просмотра, и кнопку редактирования, когда назначена роль редактирования.

1 Ответ

0 голосов
/ 18 февраля 2019

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

Если вы хотите, вы, конечно, можете изменить этот метод так, чтобы он принимал список ролей вместо одной.

...