如何在 API 平台中进行单个端点操作 public?
How to make a single endpoint operation public in API Platform?
在 API 平台中,我用 JWT 保护了所有端点,但我想要 POST 用户 public 以便用户可以自行注册。
如何在实体级别执行此操作?
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ApiResource(
collectionOperations: [
'get',
"post" => ["security" => "is_granted('PUBLIC_ACCESS')"], //this does not work
],
itemOperations: [
'get'
],
)]
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
如果我在 security.yaml
中像往常一样在 Symfony 中实现它,它就可以工作
access_control:
- { path: ^/docs, roles: PUBLIC_ACCESS } # Allows accessing the Swagger UI
- { path: ^/authentication_token, roles: PUBLIC_ACCESS }
- { path: ^/users, roles: PUBLIC_ACCESS, methods: POST }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
我只是想知道是否可以在实体级别使用注释来完成。
Api-平台安全规则在Symfony 的安全访问规则之后处理。
因此,如果 Symfony 的访问规则比 Api- 平台的规则更严格,则这些规则适用并且请求将被拒绝。
如果反过来(security.access_rules
声明端点“打开”,但在您的资源配置上您声明了更严格的 is_granted()
配置),它会起作用,从那时起请求将通过 Symfony 防火墙并到达 Api-平台访问侦听器。
为了能够使用 attributes/annotations 配置安全性,那么安全性配置需要比 Symfony 防火墙上的更严格。
例如将 /
设置为 PUBLIC_ACCESS
,然后在每个资源上使用相应的 is_granted()
配置 security
。
在 API 平台中,我用 JWT 保护了所有端点,但我想要 POST 用户 public 以便用户可以自行注册。
如何在实体级别执行此操作?
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ApiResource(
collectionOperations: [
'get',
"post" => ["security" => "is_granted('PUBLIC_ACCESS')"], //this does not work
],
itemOperations: [
'get'
],
)]
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
如果我在 security.yaml
中像往常一样在 Symfony 中实现它,它就可以工作
access_control:
- { path: ^/docs, roles: PUBLIC_ACCESS } # Allows accessing the Swagger UI
- { path: ^/authentication_token, roles: PUBLIC_ACCESS }
- { path: ^/users, roles: PUBLIC_ACCESS, methods: POST }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
我只是想知道是否可以在实体级别使用注释来完成。
Api-平台安全规则在Symfony 的安全访问规则之后处理。
因此,如果 Symfony 的访问规则比 Api- 平台的规则更严格,则这些规则适用并且请求将被拒绝。
如果反过来(security.access_rules
声明端点“打开”,但在您的资源配置上您声明了更严格的 is_granted()
配置),它会起作用,从那时起请求将通过 Symfony 防火墙并到达 Api-平台访问侦听器。
为了能够使用 attributes/annotations 配置安全性,那么安全性配置需要比 Symfony 防火墙上的更严格。
例如将 /
设置为 PUBLIC_ACCESS
,然后在每个资源上使用相应的 is_granted()
配置 security
。