Как настроить контроль доступа для пользователя в symfony? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть таблица пользователей, в которой поле ролей содержит ["ROLE_SUPERUSER"]

Теперь у меня есть два URL:

  • localhost: 8000 / api / ru / login
  • localhost: 8000 / api / en / test

Когда пользователь успешно входит в систему, он генерирует повар ie. Как установить контроль доступа ко второму URL-адресу, если, если повар ie не установлен, этот URL-адрес недопустим.

Я добавил следующие строки в файл security.yaml

access_control:
 - { path: ^/api/{locale}, roles: IS_AUTHENTICATED_ANONYMOUSLY }
 - { path: ^/api/{locale}, roles: ROLE_SUPERUSER}

Но это не сработало.

Любая помощь?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

В access_control выполняется первая настройка соответствия. Поскольку ваши шаблоны совпадают, все пользователи будут IS_AUTHENTICATED_ANONYMOUSLY. Вы должны использовать отдельные пути / шаблоны для вашего брандмауэра для авторизации с разными ролями:

access_control:
 - { path: ^/api/{locale}/secured, roles: ROLE_SUPERUSER}
 - { path: ^/api/{locale}, roles: IS_AUTHENTICATED_ANONYMOUSLY }

Более подробную информацию вы можете найти в документации: Symfony - Как ограничить брандмауэры запросом

1 голос
/ 11 марта 2020

Брандмауэр выберет первый подходящий маршрут и применит ограничение.

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

Я не уверен на 100%, будет ли {locale} в брандмауэре работать, в отличие от описания маршрута. Однако вы можете использовать RegEx для определения правила на ^/api/<anything>/test:

access_control:
 - { path: ^/api/.*?/test, roles: ROLE_SUPERUSER }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...