首页 > 解决方案 > 仅当用户未在 API 平台中连接时才允许发布方法

问题描述

我的 API 有问题。我正在使用 API 平台,如果我的问题可能很愚蠢,我很抱歉。

在我的 API 中,我有一个管理员、一个版主和一些用户。我想要的是只有访问者才能为用户创建帐户。因此管理员、版主和用户不能创建用户帐户。

这是我的层次结构文件(security.yaml):

role_hierarchy:
    ROLE_MODERATOR: ROLE_USER
    ROLE_ADMIN: ROLE_MODERATOR

这是我的实体用户的 @ApiResource :

 * @ApiResource(
 *     attributes={
 *         "normalization_context"={"groups"={"read-user"}},
 *         "denormalization_context"={"groups"={"write-user"}},
 *         "validation_groups"=App\Validator\ValidationGroupsGenerator::class
 *     },
 *     collectionOperations={
 *         "get"={"method"="GET", "access_control"="is_granted('ROLE_MODERATOR')"},
 *         "post"={"method"="POST"}
 *     },
 *     itemOperations={
 *         "get"={"method"="GET", "access_control"="user.getId() === object.getId() or is_granted('ROLE_MODERATOR')"},
 *         "put"={"method"="PUT", "access_control"="user.getId() === object.getId() or is_granted('ROLE_MODERATOR')"}
 *     }
 * )

这是我的 access_control (security.yaml):

access_control:
    - { path: ^/users, role: IS_AUTHENTICATED_ANONYMOUSLY, methods: [POST] }

场景:我正在尝试以访问者/用户/版主/管理员的身份创建用户帐户

我的错误:版主、管理员和用户可以创建用户帐户

预期结果:只有访问者可以创建用户帐户

我试过的:

我在我的实体中添加了这个

"post"={"method"="POST", "access_control"="user is null"}

它不允许角色创建用户帐户(为他们提供 403 Forbidden,这正是我想要的),但我现在尝试以访客身份创建帐户时找不到 401 JWT 令牌。

你有什么解决方案可以帮助我吗?提前致谢

标签: symfonyapi-platform.com

解决方案


通过将其放入collectionOperations我的实体用户中解决:

"post"={"method"="POST", "access_control"="is_granted('IS_AUTHENTICATED_FULLY') === false"}

推荐阅读