|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
Всем, привет! Ни разу не реализовывал подобного, решил сначала спросить. Есть User, к нему привязаны некие права, например "SAVE_ITEM" Есть в сервисе метод. Код: java 1. 2. 3.
Ну и соответственно, если у юзера нет такого права в списке, то выдавать ошибку (какую именно, пока не важно). И главное: проверка наличия права на сохранение конкретного item зависит от самого item, а конкретнее - если item есть в той же группе, что и пользователь. То есть нужно зайти в метод, и проверить право через сам item и затем "отшить" или выполнить сохранение. Предполагаю, что можно через аннотации такое реализовать как-то можно. По крайней мере, это было бы красиво :) Или делать через... какой-нибудь enum и отдельные методы проверки внутри каждого метода? В общем буду рад любым теоретическим вариантам и еще больше кускам кода :) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 17:53 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
упс, вот так правильно)) Код: java 1. 2. 3.
п.с. repository здесь - это JPA репозиторий, инжектится через @Autowired ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 17:57 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
Nixic, Это право уже не на метод как в теме озаглавлено. Ну и права то где у тебя? В какой либе? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 17:59 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
идея понятна? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 18:06 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
PetroNotC SharpNixic, Это право уже не на метод как в теме озаглавлено. Ну и права то где у тебя? В какой либе? Согласен, право на объект itemDTO, действия над ним, то есть на выполнение метода :) Права в виде обычного List<String> прикрепляются в методе проверки в который передается авторизованный юзер и объект. Там проверяется есть у них общая группа, т.е. состоят ли они, добавлены ли в общую группу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 18:10 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
chpasha, почти понятна, главное, что через аннотации, как я и хотел это вполне реально, спасибо! Попробую реализовать, если будут затыки, отпишусь. Ну и если сделаю - тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 18:13 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
chpasha, Спасибо большое! :) Заюзал идею примерно так: 1. Все права закинул в отдельный enum. 2. В контроллере (тут еще от swagger'a всякое, пусть тоже тут будет): Код: java 1. 2. 3. 4. 5. 6. 7.
добавили в параметры метода requiredPermissions 3. В сервисе метод переписал так: Код: java 1. 2. 3. 4. 5. 6.
4. В компоненте permissionSecurity Код: java 1. 2. 3. 4.
пришлось создать уже(пока) парочку методов для разных проверок, где-то с проверкой прав на объект у контретного юзера с предварительной проверкой "а не админ ли ты часом?". Ниже метод проверки только на то, что юзер в группе админов с какой-то ролью откуда берется список прав. checkMatchPermissions(...) проверяет любое первое совпадение прав юзера с требуемыми правами. Код: java 1. 2. 3. 4. 5.
Если совпадений не найдено получаем 500 ошибку с сообщением "Доступ запрещен". В общем, пока что всё выглядит отлично :) Ну кроме извечной проблемы как называть методы и переменные))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 21:39 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
NixicЕсли совпадений не найдено получаем 500 ошибку с сообщением "Доступ запрещен". Если сделать code review, и критиканство навести :) , то 500 ошибка это же server error, нормальный результат должен быть "403 Forbidden" так что можно еще логи посмотреть, может найдется какой то косяк И этот фрагмент. if (someCheck()) return true else return false напоминает "индусский код". Понятней если просто написать return someCheck(), хотя метод лучше переименовать чтобы еще понятней было. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 06:08 |
|
Проверка наличия права пользователя выполнить данный метод
|
|||
---|---|---|---|
#18+
vas0NixicЕсли совпадений не найдено получаем 500 ошибку с сообщением "Доступ запрещен". И этот фрагмент. if (someCheck()) return true else return false напоминает "индусский код". Понятней если просто написать return someCheck(), хотя метод лучше переименовать чтобы еще понятней было. Да, какой-то оверхед получается)) Спасибо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 07:57 |
|
|
start [/forum/topic.php?fid=59&msg=39859987&tid=2121126]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 385ms |
0 / 0 |