我们的小组讨论了如何在我们的应用程序中处理http限制。
在我们的应用中,用户可以创建产品。因此,我们有/products
和/product/1/show
等路线来列出和显示用户的产品。用户无法看到其他用户的产品。该应用程序使用REST端点来获取数据。 API调用看起来像这个/api/product/1/
来获取单个产品。
我们为其他类型的实体提供了更多的路由/ API端点。
问题是如何保护针对其他用户的路由/ API请求?
我们有两个解决方案:
使用防火墙和选民。选民获取当前URL /product/1/show
并检查给定产品是否归当前登录用户所有。
使用没有防火墙的选民:http://symfony.com/doc/current/cookbook/security/voters_data_permission.html
使用角色系统:http://jmsyst.com/bundles/JMSSecurityExtraBundle/master/annotations
我更喜欢解决方案1.因为我们需要的所有信息(谁是产品的所有者)仍然存在。我们只需要获取实体并进行检查。 在解决方案2中,我们必须将选民逻辑分散到几个控制器上。
是否有关于此问题的建议或经验?
答案 0 :(得分:0)
如果我必须在这三者之间做出选择那将是1.但我建议采用不同的路线。我假设/ product / 1 / show中的数字1代表用户号码?如果是这种情况,我建议您制作没有数字的新路线,例如/ my-products / show。然后,控制器必须使用当前登录用户的ID。