symfony - 仅当用户未在 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 令牌。
你有什么解决方案可以帮助我吗?提前致谢
解决方案
通过将其放入collectionOperations
我的实体用户中解决:
"post"={"method"="POST", "access_control"="is_granted('IS_AUTHENTICATED_FULLY') === false"}
推荐阅读
- javascript - 如何在 Kendo UI 对话框中实现 Kendo Validation?
- git - 如何测试 git pull 的结果?
- mysql - 如何使用 Mysql 或 postman 将数据从一个表复制到另一个现有表?
- sql - “创建非聚集索引”,那是什么以及如何创建?
- json - Swift 中的异步 JSON 请求
- laravel-5.7 - 如何覆盖供应商服务提供商使用的供应商特征?
- dynamics-crm - Dynamics 365,UCI - 找不到编辑新表单行为的方法
- javascript - 如何从数组中获得独特的年份?
- python - bash:从python脚本向进程发送信号
- amazon-web-services - 如何使用 API 网关进行身份验证?