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

标签 rest caching authorization roles

我们有一个 Multi-Tenancy 系统,具有多个不同级别的访问权限——有时甚至是同一用户在多个角色之间切换时也是如此。我们开始讨论转向 RESTful 实现。我刚刚开始对整个 REST 事情感到困惑。

那么,当他们访问资源时,我该如何限制对正确记录的访问,尤其是在考虑缓存时?如果用户A访问example.com/employees他们将收到与用户 B 不同的响应;当用户 A 切换到不同的角色时,他甚至可能会收到不同的响应。为了帮助促进缓存,角色的 id 是否应该以某种方式合并到 uri 中?也许像 example.com/employees/123 (这违反了 REST 的规则),或者作为某种从属资源,如 example.com/employees/role/123 (这似乎很愚蠢,因为 role/### 将被附加到所有地方的 URI 中)。我可以帮忙,但我认为我在这里遗漏了一些东西。

编辑提及 Multi-Tenancy

最佳答案

让用户凭据充当带外资源标识符(即,将同一 URL 上的不同 View 呈现给不同角色)将变得令人讨厌。用户和应用程序在它们之间交换 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。这对于相关场景特别可行,当“角色”不是安全角色而是 Multi-Tenancy 命名空间时(即,每个服务供应帐户都有自己的服务“ View ”)。

    关于使用多个用户角色进行 REST、缓存和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671582/

    相关文章:

    rest - 通过API获取指标

    api - 是否可以在 ServiceStack 中使用一种通用/抽象服务?

    javascript - 有没有办法避免 navigator.geolocation.getCurrentPosition 被缓存?

    java - 是否可以从普通的java文件中禁用tomcat缓存

    angularjs - Mailgun + AngularJS + 用于 http post 请求的 Auhtentication

    python - 值错误 ("Tensor %s is not an element of this graph."% obj)

    c# - dotnet REST API 中返回类型的多态性

    jsf - 有条件地启用或禁用 o :cache through an attribute?

    c# - C# 中最好的 "curl -u"等价物

    permissions - 复杂应用程序的高性能 ACL 模式(RDBMS、图形数据库?)