我正在使用Spring MVC和Hibernate。
假设我们有控制器操作
@GetMapping("/user/remove")
public String removeAction(@ModelAttribute(value = "user_id") User user, RedirectAttributes redirectAttributes) {
...
}
是否可以应用一些规则来检查用户是否可以删除该用户?例如,具有角色ROLE_ADMIN
的用户可以删除所有用户,具有角色ROLE_USER
的用户可以删除由他们自己创建的用户。
第二个问题 当具有角色ROLE_USER
的用户列出所有用户时,是否可以在 Hibernate 级别过滤该列表,而无需迭代所有用户并检查谁创建了该用户?
最后一个问题。要删除操作,我正在传递user_id。可以在不调用UserService的情况下从数据库中检索该用户,如果所有权限都正常,则希望该用户对象在该删除操作中可用。
Spring 有一个注释类型安全性,可用于您的第一个问题,尽管您已经为角色设置了用户,请参阅方法 @Secured("ROLE_ADMIN") 的链接注释类型安全
您可能需要为数据库条目设置一些额外的逻辑以显示谁创建了用户,您可能已经完成了此操作,这将允许您根据创建者将列表分开,也许可以选择用户名和角色,这可能有助于问题 2。问题 3 您可以使用 Jstl 连接到您的数据库甚至 JQuery,告诉我们更多关于您的环境设置的信息,希望这能为您提供一些方向。快乐的编码
一种选择是使用@RolesAllowed
或@Secured
注释。根据这篇文章,两者本质上做同样的事情
它们可以在类级别或方法级别应用。