问题标签 [symfony4-voter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
symfony - 在 API 平台安全注解中使用常量
Symfony 的 API 平台允许您使用 Voters 来授予或拒绝访问您的资源,如他们的文档中所述。
但是,所有示例都使用魔术值,我宁愿为此使用类常量。前任。
我已经尝试使用UserVoter
该类的“use”语句App\Security\Voter\UserVoter::USER_EDIT
以及 escaped App\\Security\\Voter\\UserVoter::USER_EDIT
,但是 API 平台没有接受任何内容
问题:如何在 API 平台中使用具有安全性的类常量?
php - Symfony - Voter 在 /GET LIST 上返回空对象
我正在使用Symfony5
并在应用程序ApiPlatform
上JWT
实施。
我有一条经典路线,通过将动态组添加到未经身份验证的用户的某些属性中,它只返回所有实体的/GET
少数字段。User
"anonym:read"
ContextBuilder
由于用户不需要JWT token
,我已将其添加到我的文件的access_control
一部分:security.yml
这条路由也被其他不同权限的用户使用,所以它通过一个Voter
.
这voter
就是我阻塞的地方,我应该在$subject
变量中接收的对象列表最终为空,从support
投票者的函数返回 false 并因此拒绝访问。
如果我security
从路由注释中撤消约束/GET
,我会收到User
我想要的列表,其中只有所需的字段。
我无法弄清楚为什么$subject
这个对象列表为空。
User.php:
UserContextBuilder.php:
UserVoter.php:
如果有人知道为什么会发生这种情况,我将不胜感激
symfony - ApiPlatform - 基于 apiplatform 过滤器实现授权
我正在使用ApiPlatform
和Symfony5
我在实体上放置了一个过滤器,User
以按名为的类的布尔值对它们进行排序$expose
用例:
- 对于
/users?expose=true
路由ROLE_USER
可以获取每个user
过滤器$expose
设置为的列表true
- 无论如何,
/users/
路线ROLE_ADMIN
都可以得到每一个的列表user
这是我的User
课:
我通过以下方式实施我的授权规则UserVoter
:
为了恢复列表, User
我恢复了通过LIST
属性传递的分页器对象,并确保请求结果中的对象是 type User
。这部分已经过测试并且可以正常工作。
现在我的问题来自这样一个事实,即这两条路线与 my 基本相同voter
,因此我通过它实施的授权规则适用于它们。
我想做的是告诉我的选民这两个请求是不同的(我认为我可以在恢复Paginator
对象时这样做,但似乎不可能)所以我可以在同一个开关盒中分别处理它们。
到目前为止,我还没有找到实现它的方法
有没有办法实现这种规则?
还是有另一种方式来实现这种授权?
谢谢!
symfony - ApiPlatform - 在子资源路由上实现安全授权
我正在使用Symfony5
和ApiPlatform
我有一个User
实体和一个Product
实体。
我想通过子资源列出我所有用户的产品,为此我实现了我的user
类,如下所示:
它确实创建了一条路线/users/{id}/products
并返回我想要的东西。
我阻止的部分是当我想向这条路线添加授权时:
ROLE_ADMIN
可以访问这条路线ROLE_USER
拥有资源的人可以访问它- 所有其他角色将获得
FORBIDDEN
为此,我遵循了文档:https ://api-platform.com/docs/core/subresources/#using-serialization-groups
- 添加
subresourceOperations
到@ApiSubresource
注释 api_users_consultations_get_subresource
通过bin/console debug:router
命令恢复了我的已生成路线的名称- 并简单地设置一个
security=is_granted('ROLE_ADMIN')
方法,就像其他操作一样。 - 或
security=is_granted('SUB_LIST', object)
击中voter
但是当我运行我的测试时,我得到200
了我应该收到403
的地方,UserVoter
orProductVoter
没有被触发,也没有被触发is_granted('ROLE_ADMIN')
。
好像subresourceOperations
注释没有被ApiPlatform
.
我还尝试将操作的名称从更改api_users_consultations_get_subresource
为:
consultations_get_subresource
api_consultations_get_subresource
clients_get_subresource
api_clients_get_subresource
和我在上面看到的不同的其他变体Github
在某些情况下解决了这个问题(比如这里https://github.com/api-platform/api-platform/issues/1581#issuecomment-662503549)但它对我不起作用。
所以我想知道我没有做些什么来正确实施它吗?
这是一个已知问题ApiPlatform
吗?
有谁看到我的逻辑在哪里失败?
是否有另一种方法来设置subresource
路线的安全性?
是否有更多关于安全性的文档subresource
?我没有找到很多关于这个特定主题的材料
symfony - TokenInterface $token->getUser() 不带回对象
我正在使用 ApiPlatform 制作 CheeseListing RESTful API。
我为我的 CheeseListing 对象做了一个投票者:
为什么当是一个对象并且是一个Iri“/api/users/1”$subject->getOwner() === $user
时会返回true$token->getUser()
$subject->getOwner()
php - Symfony 4 在 html.twig 中的选民检查角色
我创建了一个名为 CustomVoter 的自定义选民。我想检查 html.twig 中的用户角色,如果它有角色我想做点什么。我的登录用户具有 CustomVoter 中指示的“CAN_REMOVE”角色。不幸的是,它不起作用或无法在 html.twig 中看到选民。问题是什么?