使用多个用户角色进行REST、缓存和授权

使用多个用户角色进行REST、缓存和授权,rest,caching,authorization,roles,Rest,Caching,Authorization,Roles,我们有一个具有多个不同访问级别的多租户系统——有时甚至对同一个用户,因为他们在多个角色之间切换。我们开始讨论如何转向RESTful实现。剩下的事我都快把脚弄湿了 那么,当正确的记录访问资源时,特别是在考虑缓存时,我如何限制对这些记录的访问呢?如果用户A访问example.com/employees,他们将收到与用户B不同的响应;当用户A切换到不同的角色时,他甚至可能会收到不同的响应。为了方便缓存,角色的id是否应该以某种方式合并到uri中?可能像example.com/employees/123

我们有一个具有多个不同访问级别的多租户系统——有时甚至对同一个用户,因为他们在多个角色之间切换。我们开始讨论如何转向RESTful实现。剩下的事我都快把脚弄湿了

那么,当正确的记录访问资源时,特别是在考虑缓存时,我如何限制对这些记录的访问呢?如果用户A访问
example.com/employees
,他们将收到与用户B不同的响应;当用户A切换到不同的角色时,他甚至可能会收到不同的响应。为了方便缓存,角色的id是否应该以某种方式合并到uri中?可能像
example.com/employees/123
(这违反了REST的规则),或者像
example.com/employees/role/123
(这看起来很傻,因为
role/####
将被添加到各地的URI中)。我可以帮忙,但我觉得我遗漏了什么


编辑以提及多租户

将用户凭据用作带外资源标识符(即,将同一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 vs.users.example.com/employees。当“角色”不是安全角色而是多租户命名空间(即每个服务配置的帐户都有自己的服务“视图”)时,这对于相关场景特别可行。

我完全同意。想象一下另一个场景,当您决定实现一个搜索引擎来抓取资源时。如果对不同的访问级别使用相同的URL,搜索引擎必须使用不同的凭据对相同的URL进行爬网,并以某种方式确保结果仅限于适当的访问级别。为不同的访问级别提供不同的资源使事情变得更容易。谢谢!我确实有一个后续问题,实际上我有一个非常类似的问题,但不能通过建议的解决方案来解决。如果您可以在这里查看,那就太好了: