如何限制用户功能
How to restrict user functionality
我需要根据用户分配的角色限制我的 Vaadin 12 应用程序中的编辑功能
目前我们有页面级别的安全性,即用户只能看到基于指定角色的页面,比如@Secured(Role.VIEW_PAGE)
用户必须在分配查看角色时看到查看按钮,在分配编辑角色时看到编辑按钮。
您可以使用此方法,它接受一个角色并查看用户权限是否包含此角色。它基本上与 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
class 如果您已经有了它。如果没有,现在是创建一个的好时机 ;)。
您现在可以在您的视图中调用这样的方法:
if(SecurityUtils.userHasRole(Role.EDIT_PAGE)){
add(new Button("Edit"));
} else {
add(new Button("View"));
}
如果您愿意,您当然可以更改此方法以接受角色列表而不是仅接受一个。
我需要根据用户分配的角色限制我的 Vaadin 12 应用程序中的编辑功能
目前我们有页面级别的安全性,即用户只能看到基于指定角色的页面,比如@Secured(Role.VIEW_PAGE)
用户必须在分配查看角色时看到查看按钮,在分配编辑角色时看到编辑按钮。
您可以使用此方法,它接受一个角色并查看用户权限是否包含此角色。它基本上与 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
class 如果您已经有了它。如果没有,现在是创建一个的好时机 ;)。
您现在可以在您的视图中调用这样的方法:
if(SecurityUtils.userHasRole(Role.EDIT_PAGE)){
add(new Button("Edit"));
} else {
add(new Button("View"));
}
如果您愿意,您当然可以更改此方法以接受角色列表而不是仅接受一个。