Spring Security有一个Principal和GrantedAuthority的基本概念。我已经实现了Spring Security并阅读了这个stackoverflow,并在基本层面上理解“ROLE”只不过是以“ROLE_”为前缀的GrantedAuthority。
我不明白为什么首先要有这个惯例?为什么@PreAuthorize("hasRole('XYZ')")
与@PreAuthorize("hasAuthority('ROLE_XYZ')")
等效?
隔离这样的授权机构有什么特别之处?目的是什么?
此外,将这些“ROLES”应用于域模型的特定实例的最佳约定是什么。例如,一个跟踪项目的系统,您希望明确授予用户查看和编辑某些项目的权限。我可以创建ROLE_EDIT_PROJECT和ROLE_VIEW_PROJECT,但这是应用程序范围的。你会把ROLE与特定项目的关系放在哪里?连接表?您是否会将Spring Security纳入其中,或者在您的应用程序中从头开始构建此类安全性?
答案 0 :(得分:1)
我很遗憾不知道为什么使用这个约定,可能只是我想的遗留代码。
对于问题的第二部分,我建议使用" hasPermission(项目,'查看')"并定义自己的PermissionEvaluator。
可以找到更多信息here