如何限制用户功能

时间:2019-02-18 09:10:26

标签: java vaadin-flow

我需要基于用户分配的角色来限制Vaadin 12应用程序中的编辑功能

当前,我们具有页面级安全性,即用户只能看到基于指定角色的页面,例如@Secured(Role.VIEW_PAGE)

用户在分配视图角色时必须看到视图按钮,而在分配编辑角色时必须看到编辑按钮。

1 个答案:

答案 0 :(得分:1)

您可以为此使用此方法,该方法接受一个角色并查看用户权限是否包含此角色。它基本上与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);
}

定义该方法的一个好地方是已经提到的SecurityUtils类(如果已有的话)。如果没有,现在是创建一个;)的好时机。

您现在可以在视图中调用这样的方法:

if(SecurityUtils.userHasRole(Role.EDIT_PAGE)){
    add(new Button("Edit"));
} else {
    add(new Button("View"));
}

如果愿意,您当然可以更改此方法以接受角色列表,而不是仅一个。

相关问题