Quber
@Quber
PHP Team lead

Как разграничить права в Symfony2 для REST API маршрутов?

Установлен FOSUserBundle.
Стандартные настройки безопасности для маршрутов:

/* app/config/secutiry.yml */

access_control:
    - { path: ^/login$,   role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/,   roles: ['ROLE_ADMIN'] }
    - { path: ^/,         role: IS_AUTHENTICATED_REMEMBERED }


Есть маршруты на создание, удаление, редактирование, получение сущности.
Так вот права на получение должны быть у всех пользователей. А у администраторов всё остальное (редактирование, удаление, создание). Все API маршруты у меня начинаются с site.ru/api

Конечно можно сделать что то вроде:
/* app/config/secutiry.yml */

access_control:
    - { path: ^/api/entity/delete$,   roles: ['ROLE_ADMIN'] }
    - { path: ^/api/entity/create$,   roles: ['ROLE_ADMIN'] }
    - { path: ^/api/entity/update$,   roles: ['ROLE_ADMIN'] }

Но что если этих сущностей много? Порядка 15. Для каждой надо так прописывать? Что то мне подсказывает, что это не самый лучший способ. В контроллере проверять права тоже не правильно, я считаю, это задача роутера.

Может сделать приставку site.ru/api/admin ?
Получится тогда так:
/* app/config/secutiry.yml */

access_control:
    - { path: ^/api/admin/,   roles: ['ROLE_ADMIN'] }
  • Вопрос задан
  • 2538 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
- { path: ^/api/\w+/(create|update|delete)$,   roles: ['ROLE_ADMIN'] }


Хотя по сути у вас не должно быть этих update/delete/create. У вас должно быть POST/PUT/DELETE метод.

Я обычно это дело прописываю в контроллере (через аннотации), либо разруливаю в сервисе. Если у нас все очень сложно - можно реализовать воутер (начиная с Syfony2.4 вроде как).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы