2010-04-19 64 views
8

我们拥有多租户系统,具有多个不同级别的访问权限 - 有时甚至是在多个角色之间切换的同一用户。我们正在开始讨论如何转向RESTful实现。我刚刚开始用全部REST的东西弄湿我的脚。多用户角色的REST,高速缓存和授权

那么我如何才能在访问资源时限制对正确记录的访问,特别是考虑到缓存时?如果用户A访问example.com/employees,他们将收到与用户B不同的响应;当用户A切换到不同的角色时,甚至可能会收到不同的响应。为了帮助缓存,应该将角色的id以某种方式并入uri中?可能类似于example.com/employees/123(违反REST规则),或者像example.com/employees/role/123(这看起来很愚蠢,因为role/###将被附加到遍布每个地方的URI)的某种下级资源。我可以帮助,但认为我在这里失去了一些东西。

编辑提多租户

回答

7

具有用户凭据作为带外资源标识符(即呈现在相同的URL,以不同的角色不同的看法)会变成讨厌的道路。用户和应用程序在它们之间交换URL,发生这种情况时情况会变得很糟糕,并且URL仅为不同的凭证返回不同的内容。

我想说的是每个角色拥有世界不同的看法,因此每个角色应该对服务的访问不同的路径:

  • 管理员连接到example.com/admin/employees
  • 用户连接到example.com/users/employees
  • 作用FOO可能连接到example.com/foo/employees

这样你分开“这个角色看待世界某某”相提并论来自'这个世界的这个视角可以通过角色foo'来获得。管理员可以连接到example.com/users/employees并验证普通用户如何看待这个世界,而无需管理员首先模拟较低特权的别名。

您也可以将DNS部分用于同一目的:admin.example.com/employees与users.example.com/employees。当“角色”不是一个安全角色,而是一个多租户名称空间(即每个服务供应帐户都有它自己的服务“视图”)时,这对于相关场景特别可行。

+0

我完全同意。想象一下当您决定实施抓取资源的搜索引擎时的另一种情况。如果您针对不同的访问级别使用相同的网址,搜索引擎必须使用不同的凭据来抓取相同的网址,并以某种方式确保结果仅限于适当的访问级别。为不同的访问级别提供不同的资源使事情变得更容易。 – 2010-04-20 00:46:03

+0

谢谢!我有一个后续问题http://stackoverflow.com/questions/2676786/should-a-given-uri-in-a-restful-architecture-always-return-the-same-response – keithjgrant 2010-04-20 16:19:43