|  | 
| 
Проверка наличия права пользователя выполнить данный метод | |||
|---|---|---|---|
| #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&fpage=23&tid=2121126]: | 0ms | 
| get settings: | 11ms | 
| get forum list: | 15ms | 
| check forum access: | 4ms | 
| check topic access: | 4ms | 
| track hit: | 28ms | 
| get topic data: | 11ms | 
| get forum data: | 3ms | 
| get page messages: | 54ms | 
| get tp. blocked users: | 2ms | 
| others: | 232ms | 
| total: | 364ms | 

| 0 / 0 | 
