Spring Security:“编辑”角色是否隐式假定用户可以阅读?

时间:2018-09-14 14:48:09

标签: spring-mvc spring-security

我正在使用Spring Security实现REST服务的授权。我有可以分组为角色组的角色。

特别是,我扮演VIEW_EMPLOYEEEDIT_EMPLOYEE角色。

我有EmployeeController,有两个端点:readEmployeeupdateEmployee。通过下一个Spring Security注释:updateEmployeeEDIT_EMPLOYEE端点通过@Secured(EDIT_EMPLOYEE)角色得到保护。

我的问题是关于readEmployee的:我是否应该同时使用 VIEW_EMPLOYEEEDIT_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_*角色。

在使用哪种方法方面有最佳实践吗?

0 个答案:

没有答案