169 похожих чатов

Привет, есть эндпоинт GET /api/user/{id}, который возвращает инфу о юзере.

есть две роли superadmin и admin. доступ к этому эндпоинту есть у обеих ролей, но я не хочу показывать чувствуительную инфу, если ее запршивает чел с ролью admin. то есть предположим у меня дто User, там есть каике-то поля и поле phone. я не хочу это поле включать в ответ если за ним пришел чел admin. как я могу этого добиться? я нагуглил решение с кастомной аннотацией, она бы имела поле "roles" и вешать на нужные поля её, и @JsonFilter из Jackson. типа запилить кастомный BeanPropertyFilter, который бы там из контекста доставал объект Authentication и чекал его роли и в Jackson конфигу его добавить.
еще есть какие-то задумки через @PostFilter/@PostAuthorize , может какое-то правило интересное придумать можно через SPEL, которое бы отсеивало поля ненужные. в общем что можете подсказать?

31 ответов

17 просмотров

Та сделай два инфо объекта с одним интерфейсом и всё.

Дмитрий- Автор вопроса

не подходит. если 100 полей будет, 100 объектов делать

Дмитрий- Автор вопроса
Дмитрий
Шта.

ваш подход предполагает, что если у меня будет 100 разных полей, которые я хочу исключить в зависимости от роли, то мне придется делать объекты под них. мне это не для одного раза гнужно, у меня есть 50 дто, в них по 10-20 полей, и я в зависимости от роли хочу разные поля скрывать в разных дто

Дмитрий
не подходит. если 100 полей будет, 100 объектов де...

Сто полей у юзера? Идея в том, чтобы просто исключить нужные поля.

Могут точно сказать что PostFilter точно нет, а postAuthorize даже не представляю как можно выбрать вариант выдачи в зависимости от роли

Дмитрий- Автор вопроса
Nickelodeona K
100 и 101 поле. два объекта

имел ввиду 100 полей, которые надо исключить. в разных комбианцияз причем

Дмитрий
имел ввиду 100 полей, которые надо исключить. в ра...

для каждой роли своя таблица с набором полей, к основной сущности 1 к 1

Дмитрий- Автор вопроса
Nikolay Veselov
Могут точно сказать что PostFilter точно нет, а po...

просто предположил. вроде правила там можно довольно гибкие писать через spel

Дмитрий
имел ввиду 100 полей, которые надо исключить. в ра...

Откуда уже разные комбинации? Вопрос изначально стоял что есть две роли.

Дмитрий- Автор вопроса
Дмитрий
Откуда уже разные комбинации? Вопрос изначально ст...

я упростил вопрос. ролей много больше, мне покзаалось, что проще привести пример в двумя ролями.

Дмитрий
просто предположил. вроде правила там можно доволь...

Сделай тогда адаптер который будет из дао делать нужный тебе дто объект. В адаптере будет логика

Дмитрий
просто предположил. вроде правила там можно доволь...

Фильтр работает с массивами данных, и его неправильно будет использовать не в контексте секьюрити, а пост авторайз применяет правило, можно возвращать значение или нет

Дмитрий- Автор вопроса
Дмитрий
Сделай тогда адаптер который будет из дао делать н...

ну так а как он нужный объект будет делать? это придется через if'ы там из секьюрити контекста доставать authentication и смотреть что за роль, и какие поля отсечь?

Дмитрий- Автор вопроса
Дмитрий
ну так а как он нужный объект будет делать? это пр...

По роли будешь отдавать нужный формат. Но вообще тут вопрос архитектуры корявой.

Дмитрий- Автор вопроса
Дмитрий
По роли будешь отдавать нужный формат. Но вообще т...

а при чем тут архитектура? есть дто, есть поля, я хочу какие-то поля не отображать определнным ролям. ну и опять же, по роли определять, мне тогда придется для каждого дто делать отдельный маппер-метод

Дмитрий
мне тогда 50 методов писать, для 50 дто

Зачем 50. У тебя все поля доступны из дао. Ты просто смотришь роль и делаешь дто объект только с разрешенными полями

Дмитрий
а при чем тут архитектура? есть дто, есть поля, я ...

Возможно тебе стоит сделать какой-то объект внутри юзера, который будет хранить все те поля, которые должны фильтроваться по роли. Типа UserDetails

Дмитрий
ваш подход предполагает, что если у меня будет 100...

А если у тебя будет 100 ролей, то всё равно всем прописывать, к каким полям доступ давать А тут разницы я уже не вижу

Дмитрий- Автор вопроса
Дмитрий
Зачем 50. У тебя все поля доступны из дао. Ты прос...

а при чем тут дао? у меня есть репозиторий, там есть написан запрос, который достает что мне нужно, в серисе этот метод дергается, там производятся какие-то манпуляции и получается объект. как сюда дао подвязывается я не понимаю

Дмитрий
а при чем тут дао? у меня есть репозиторий, там ес...

Кхм. Ты объект из репы используешь на фронте?

Дмитрий- Автор вопроса
Sergeich0
А если у тебя будет 100 ролей, то всё равно всем п...

ну, подход с кастомной аннотацией позволяет это довольно удобно сделать. у нее будет поле – список ролей, если появились какие-то изменения, например теперь надо номер отображть для роли admin, то я просто внесу его в аннотацию. ну примерно так это будет выгялдеть class User { @Visability(roles = {superadmin, admin} String phone; }

Дмитрий- Автор вопроса

нет, я прямо противположное сказал. я говорю что в сервисе формируется дто, и я отдаю дто, я не сущность.

Дмитрий
нет, я прямо противположное сказал. я говорю что в...

Сложно писать, возможно мы не понимаем друг друга. Или говорим об одном и том же. Суть в том, что с репы приходит юзер со всеми доступными полями. А для фронта делаются инфо Объекты(кто-то их называет дто, у меня на работе например это инфо объекты) с разными полями в зависимости от роли

Дмитрий- Автор вопроса
Дмитрий
Сложно писать, возможно мы не понимаем друг друга....

ну этот момент я понял. ну так мне например надо возвращать 50 разных дто (инфо объектов). вы мне гвоорите мол "ну сделай адаптер (или маппер как я понял) который будет формировать нужный дто в зависимости от роли". ну так мне тогда на каждое дто нужен свой маппер

Дмитрий
ну этот момент я понял. ну так мне например надо в...

Да, маппер. У тебя реально что ли там так много ролей?

Как в итоге решил проблему?

Дмитрий- Автор вопроса
Akim Glushkov
Как в итоге решил проблему?

На уровне сериализации буду отсеивать нужные поля. Определил кастомный json filter provider

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта