Повторяющиеся чеки на владение на наличие вложенных ресурсов в Spring Boot с аутентификацией JWTJAVA

Программисты JAVA общаются здесь
Anonymous
Повторяющиеся чеки на владение на наличие вложенных ресурсов в Spring Boot с аутентификацией JWT

Сообщение Anonymous »

Я строю API бэкэнд с подлинностью весеннего ботинка с аутентификацией JWT. Модель домена: < /p>
  • , принадлежащий пользователю
  • Каждый проект имеет много экзаменов
  • Каждый экзамен имеет много вопросов
anutentication работает, но авторизация становятся репутативами, и ошибки, когда они становятся репутативы, и ошибки в номере, когда я не соответствует. Примеры: < /p>

[*]

Код: Выделить всё

GET /projects
фильтровать проекты аутентифицированным пользователем.
[*]

Код: Выделить всё

GET /projects/{projectId}/exams
проверяет, что проект принадлежит пользователю перед возвратом экзаменов.

Код: Выделить всё

DELETE /projects/{projectId}/exams/{examId}
можно злоупотреблять, если кто -то предоставит случайный экзамен , если я снова не проверю владение. Это повторение распространяется по контроллерам и услугам. Есть ли более чистый, централизованный шаблон для обработки собственности/авторизации для вложенных ресурсов, поэтому мне не нужно засорить каждый обработчик с той же логикой?

Код: Выделить всё

@RestController
@RequestMapping("/projects")
public class ProjectController {
private final ProjectService projectService;

public ProjectController(ProjectService projectService) {
this.projectService = projectService;
}

@GetMapping
public ResponseEntity getAll(@AuthenticationPrincipal UserPrincipal principal) {
return ResponseEntity.ok(projectService.getAllByUser(principal.getUser()));
}

@DeleteMapping("/{projectId}")
public ResponseEntity delete(@PathVariable Integer projectId, @AuthenticationPrincipal UserPrincipal principal) {
projectService.delete(projectId, principal.getUser());
return ResponseEntity.ok().build();
}
}
examploller:

Код: Выделить всё

@RestController
@RequestMapping("/projects/{projectId}/exams")
public class ExamController {
private final ExamService examService;
public ExamController(ExamService examService) {
this.examService = examService;
}

@GetMapping
public ResponseEntity getAll(
@PathVariable Integer projectId,
@AuthenticationPrincipal UserPrincipal principal
) {
return ResponseEntity.ok(examService.getAllByProject(projectId, principal.getUser()));
}

@DeleteMapping("/{examId}")
public ResponseEntity delete(@PathVariable Integer examId) {
examService.delete(examId);
return ResponseEntity.ok().build();
}
}
< /code>
 examservice (проверка владения внутри): < /em>
Эта проверка владения кажется очень неловким.public Iterable getAllByProject(Integer projectId, User user) {
Optional project = projectRepository.findAllByOwnerAndId(user, projectId);
if (project.isEmpty()) {
throw new ProjectNotFoundException(projectId);
}
return project.get().getExams();
}
Существует ли лучший архитектурный или весенний идиоматический способ централизации или устранения этих повторяющихся чеков собственности на вложенные ресурсы (проект → экзамен → Вопрос)?


Подробнее здесь: https://stackoverflow.com/questions/797 ... wt-authent

Вернуться в «JAVA»