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

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

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

31 ответов

44 просмотра

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

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

не подходит. если 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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта