我正在使用Spring Security实现REST服务的授权。我有可以分组为角色组的角色。
特别是,我扮演VIEW_EMPLOYEE
和EDIT_EMPLOYEE
角色。
我有EmployeeController
,有两个端点:readEmployee
和updateEmployee
。通过下一个Spring Security注释:updateEmployee
,EDIT_EMPLOYEE
端点通过@Secured(EDIT_EMPLOYEE)
角色得到保护。
我的问题是关于readEmployee
的:我是否应该同时使用 VIEW_EMPLOYEE
和EDIT_EMPLOYEE
的角色来保护它?还是仅使用VIEW_EMPLOYEE
?
@Secured({VIEW_EMPLOYEE, EDIT_EMPLOYEE /* do I need it here? */})
@GetMapping("/employees/{id}")
Employee readEmployee(@PathVariable Long id) {
// ...
}
@Secured(EDIT_EMPLOYEE)
@PostMapping("/employees/{id}")
Employee updateEmployee(@PathVariable Long id, Employee employee) {
// ...
}
第一种方法对我来说似乎更自然:在我的应用程序的UI上,为了编辑员工,我应该先阅读它。这意味着EDIT_EMPLOYEE
角色也应隐式允许读取雇员。
另一方面,第二种方法(仅使用VIEW_EMPLOYEE
)看起来更具可维护性:将来,每次我创建新的read*
端点时,我都不要忘记需要也向其中添加一个EDIT_*
角色。
在使用哪种方法方面有最佳实践吗?