Я реализую авторизацию для службы REST, используя Spring Security.У меня есть роли, которые можно сгруппировать в группы ролей.
В частности, у меня есть VIEW_EMPLOYEE
и EDIT_EMPLOYEE
роли.
У меня есть EmployeeController
с двумя конечными точками: readEmployee
иupdateEmployee
.Конечная точка updateEmployee
защищена ролью EDIT_EMPLOYEE
с помощью следующей аннотации Spring Security: @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) {
// ...
}
Первый подход кажется мне более естественным: в пользовательском интерфейсе моего приложения, чтобы редактировать сотрудника, я должен сначала прочитать его.Это означает, что роль EDIT_EMPLOYEE
должна также неявно позволять читать сотрудника.
С другой стороны, второй подход (только с VIEW_EMPLOYEE
) выглядит более понятным: в будущем каждый раз, когда я создаю новыйread*
конечная точка, я не должен иметь в виду, что мне нужно добавить к ней также роль EDIT_*
.
Есть ли лучшая практика, какой подход использовать?