Динамическое раскрытие полей на основе авторизации пользователя в контроллерах Spring Boot.JAVA

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

Сообщение Anonymous »

Я разработал приложение Spring Boot, в котором у меня есть набор контроллеров, которые подключаются к общему сервисному уровню. Я не против использовать какой-либо протокол ( GraphQL, gRPC и т. д.) для связи между контроллерами и клиентом. Вот обзор архитектуры:
Контроллеры взаимодействуют со службой для получения данных.
В зависимости от уровня авторизации пользователя я хочу изменить данные ответа перед отправкой их обратно.
Например:
  • Если пользователь является Администратором, он должен видеть все поля, такие как имя пользователя и адрес других пользователей.
  • Если пользователь < strong>Обычный пользователь не должен видеть такие конфиденциальные поля, как имя пользователя и адрес других людей.
Теперь моя задача заключается в следующем:
  • Единый уровень обслуживания: я хочу, чтобы уровень обслуживания был общим и допускал повторное использование на нескольких контроллерах, но применять разные правила авторизации в каждом контроллере.
  • Несколько уровней авторизации: на разных контроллерах могут быть разные уровни авторизации, и мне нужно решение, которое позволит мне адаптировать это в чистом и удобном для обслуживания виде. способ.
  • Динамическое раскрытие полей: мне нужен механизм, который динамически настраивает поля, возвращаемые клиенту, в зависимости от уровня авторизации пользователя.
Как мне структурировать архитектуру так, чтобы:
  • Контроллеры разделялись в зависимости от ролей пользователей или типов авторизации, но все они подключались к одна и та же базовая служба.
  • Каждый контроллер возвращает соответствующие поля только в зависимости от авторизации пользователя.
Не могли бы вы предложить какой-нибудь шаблон или практика, которая хорошо работает с Spring Boot для этого?
Пример:
Рассмотрим метод службы, который возвращает объект User с такими полями, как:

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

public class User {
private String username;
private String address;
private String email;
private String phone;
// getters and setters
}
Если пользователь, вызывающий API, является администратором, он должен получить полный объект «Пользователь»:

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

{
"username": "morteza.j8",
"address": "Mashhad",
"email": "morteza@jalambadani.ir",
"phone": "09123456789"
}
Но если пользователь является обычным пользователем, ответ должен включать только подмножество полей:

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

{
"email": "morteza@jalambadani.ir",
"phone": "09123456789"
}
Как я могу добиться такой фильтрации полей наиболее эффективным и удобным способом для нескольких контроллеров и служб?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... ontrollers

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