Symfony2和FOSRestBundle - 仅允许用户编辑他们拥有的数据

时间:2015-06-19 19:27:04

标签: symfony fosrestbundle

Symphony 2.2版(是的,我知道)。 FOSRestBundle:1.5.3

当前场景

我有一个REST Api驱动一个角度页面。假设每个用户都有一个与其用户记录相关联的令牌。请考虑以下网址。

  • GET / api / user / {token} / messages
  • POST / api / user / {token} / messages
  • GET / api / messages / {messageId}

  • GET / api / user / {token} / votes

  • POST / api / user / {token} / votes

因此用户可以获取GET和POST消息。用户可以进行投票并查看它们。

(我有大约30条像这样的差异路线 - 这些网址到处都是。)

问题

如何验证用户是否可以获取他们提供的令牌的GET / POST数据?

我确实知道我可以复制/粘贴一些代码来检查给定用户与URL中的用户。或者我可以在每个端点上编写一个带有checkUser()函数的服务。

我希望,有一些方法可以做到这一点,不需要我在每个端点的入口点检查用户。

2 个答案:

答案 0 :(得分:1)

不要在端点中发送身份验证。端点通常应该是幂等的,并且应该单独标识特定资源。

在HTTP标头中发送您的身份验证令牌。

据说,作为一种策略,使用@wonde烘焙您的安全性是一个好主意。我过去实现了一个自定义基本控制器类,但symphony中内置的过滤器和事件处理提供了更加性感的解决方案。

答案 1 :(得分:0)

我会创建a before filter并在其中添加checkUser()挂钩,这样您就不必检查每个端点上的用户权限

example