Я работаю над проектом, использующим платформу API.
Я хотел бы, чтобы документация пользовательского интерфейса была защищена базовой аутентификацией, а некоторые маршруты должны быть общедоступными.
Например:
/**
* An ordered dish.
*
* @ApiResource(
* attributes = {"access_control" = "is_granted('ROLE_USER')"},
* collectionOperations = {
* "get" = {"access_control" = "is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"},
* "post" = {"access_control" = "is_granted('ROLE_ADMIN')"}
* },
* itemOperations = {
* "get" = {"access_control" = "is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"}
* }
* )
*
* @ORM\Entity
* @ORM\Table(name = "uitgekookt_dish")
*/
class Dish
Когда я просматриваю документы в браузере, я могу просто получить доступ к / api / блюда из-за IS_AUTHENTICATED_ANONYMOUSLY. Я вижу, что там доступны и другие методы получения / публикации (хотя некоторые методы публикации защищены).
Однако документы не должны быть общедоступными. Как мне гарантировать, что в Symfony 4 я разделяю свою конфигурацию безопасности для документов и запросов ajax?




Не уверен, правильно ли я понял, но вы хотите ограничить /api/doc (или любой другой URL-адрес, который вы используете для документов), поэтому добавьте его в access_control в security.yaml
security:
access_control:
- { path: ^/api/doc, roles: [ROLE_ADMIN] }
Сначала отключите пользовательский интерфейс Swagger, который загружается для каждой страницы, и зарегистрируйте его как известное местоположение, как указано в эта запись в документации:
# app/config/routes.yaml
api_platform:
# ...
enable_swagger_ui: false
# app/config/routes.yaml
swagger_ui:
path: /api/docs
controller: api_platform.swagger.action.ui
Затем, как указано @zajca, добавьте маршрут управления доступом для защиты этой страницы и базовых конечных точек JSON и Hydra:
security:
access_control:
- { path: ^/api/docs, roles: [ROLE_ADMIN] }
документы в API-платформе доступны через / api. Нет / doc