У меня есть следующий путь:
api_inventories_create_inventory_listing_collection POST ANY ANY /api/inventory/{type}
Он определен в моей сущности следующим образом:
@ApiResource(
* attributes={"security"="is_granted('ROLE_ADMIN')"},
* collectionOperations={
* "get"={"security"="is_granted('ROLE_ADMIN')"},
* "create_inventory_listing"={
* "method"="POST",
* "path"="/inventory/{type}",
* "controller"=CreateSingleDeviceTypeController::class,
* },
* "post"
* },
* itemOperations={
* "get"={"security"="is_granted('ROLE_ADMIN')"},
* "delete"={"security"="is_granted('ROLE_ADMIN')"},
* "put"={"security"="is_granted('ROLE_ADMIN') or object.owner == user"},
* }
* )
Как вы можете видеть, в ApiResource этот контроллер не имеет безопасности.
И в security.yml я разрешил путь:
access_control:
- { path: ^/api/docs, roles: IS_AUTHENTICATED_ANONYMOUSLY } # Allows accessing the Swagger UI
- { path: ^/api/inventory, roles: IS_AUTHENTICATED_ANONYMOUSLY } # Allows accessing the Swagger UI
- { path: ^/authentication_token, roles: IS_AUTHENTICATED_ANONYMOUSLY }
Прилагается запрос через curl
curl -X POST 'https://127.0.0.1:8000/api/inventory/water' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json;charset=utf-8' \
--data '{"deviceType":"/api/device_types/2","serial":"provision"}'
и ответ
{"code":401,"message":"JWT Token not found"}