我们有一个多租户系统,具有多种不同的访问级别 - 有时甚至是同一个用户,因为他们在多个角色之间切换.我们开始讨论转移到RESTful实现的事情.我刚刚开始尝试整个REST的事情.
那么如何在访问资源时限制对正确记录的访问,特别是在考虑缓存时?如果用户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与users.example.com/employees.当"角色"不是安全角色而是多租户命名空间(即每个服务提供的帐户获得其自己的服务"视图")时,这对于相关场景特别可行.