问题标签 [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.

0 投票
1 回答
350 浏览

symfony - 在 API 平台安全注解中使用常量

Symfony 的 API 平台允许您使用 Voters 来授予或拒绝访问您的资源,如他们的文档中所述。

但是,所有示例都使用魔术值,我宁愿为此使用类常量。前任。

我已经尝试使用UserVoter该类的“use”语句App\Security\Voter\UserVoter::USER_EDIT以及 escaped App\\Security\\Voter\\UserVoter::USER_EDIT,但是 API 平台没有接受任何内容

问题:如何在 API 平台中使用具有安全性的类常量?

0 投票
0 回答
145 浏览

php - Symfony - Voter 在 /GET LIST 上返回空对象

我正在使用Symfony5并在应用程序ApiPlatformJWT实施。

我有一条经典路线,通过将动态组添加到未经身份验证的用户的某些属性中,它只返回所有实体的/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:

如果有人知道为什么会发生这种情况,我将不胜感激

0 投票
2 回答
382 浏览

symfony - ApiPlatform - 基于 apiplatform 过滤器实现授权

我正在使用ApiPlatformSymfony5

我在实体上放置了一个过滤器,User以按名为的类的布尔值对它们进行排序$expose

用例:

  • 对于/users?expose=true路由ROLE_USER可以获取每个user过滤器$expose设置为的列表true
  • 无论如何,/users/路线ROLE_ADMIN都可以得到每一个的列表user

这是我的User课:

我通过以下方式实施我的授权规则UserVoter

为了恢复列表, User我恢复了通过LIST属性传递的分页器对象,并确保请求结果中的对象是 type User。这部分已经过测试并且可以正常工作。

现在我的问题来自这样一个事实,即这两条路线与 my 基本相同voter,因此我通过它实施的授权规则适用于它们。

我想做的是告诉我的选民这两个请求是不同的(我认为我可以在恢复Paginator对象时这样做,但似乎不可能)所以我可以在同一个开关盒中分别处理它们。

到目前为止,我还没有找到实现它的方法

有没有办法实现这种规则?

还是有另一种方式来实现这种授权?

谢谢!

0 投票
0 回答
545 浏览

symfony - ApiPlatform - 在子资源路由上实现安全授权

我正在使用Symfony5ApiPlatform

我有一个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的地方,UserVoterorProductVoter没有被触发,也没有被触发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?我没有找到很多关于这个特定主题的材料

0 投票
2 回答
43 浏览

symfony - TokenInterface $token->getUser() 不带回对象

我正在使用 ApiPlatform 制作 CheeseListing RESTful API。

我为我的 CheeseListing 对象做了一个投票者:

为什么当是一个对象并且是一个Iri“/api/users/1”$subject->getOwner() === $user时会返回true$token->getUser()$subject->getOwner()

0 投票
0 回答
67 浏览

php - Symfony 4 在 html.twig 中的选民检查角色

我创建了一个名为 CustomVoter 的自定义选民。我想检查 html.twig 中的用户角色,如果它有角色我想做点什么。我的登录用户具有 CustomVoter 中指示的“CAN_REMOVE”角色。不幸的是,它不起作用或无法在 html.twig 中看到选民。问题是什么?