Как разрешить путь без входа в ApiPlatform? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть следующий путь:

  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"}

1 Ответ

3 голосов
/ 31 марта 2020

вы указали атрибуты безопасности на уровне ресурсов в вашей сущности: attributes={"security"="is_granted('ROLE_ADMIN')"},

Это означает, что это защита, поэтому система попытается найти пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...