Wikipedia page dedicated to HATEOAS上,我们可以看到一个示例,显示资源可能会公开它支持的操作的关系 . 在我看来,这是一种处理权限的非常优雅和分离的方式 . 如果使用者使用非所有者权限请求它,则资源的表示将不再包含 update 关系 .

问题是我的应用程序用户可以查看具有匿名权限的资源,然后登录到他的帐户 . 下次他获取资源时,浏览器可能会使用缓存的表示,而不是查询与登录的用户权限相对应的表示 .

一个对我来说很奇怪的相关案例是Hydra Core Vocabulary specification的建议 . 它建议公开我的API的Hydra文档,其中包含其资源类型及其支持的操作,如 readupdate 等 . 我有两个感兴趣的引号:

可以使用相同的功能来描述Link属性值支持的操作 . 当某些操作依赖于当前用户的权限时,这通常很有用 . 例如,只有当前用户具有删除资源的许可时才能显示“删除”链接 . 否则,链接将简单地隐藏在表示中 .

请记住,ApiDocumentation中指定的操作可能在运行时失败,因为资源或ApiDocumentation本身已经更改,因为它们已被检索 . 尝试从这样的错误中恢复的简单策略是重新加载ApiDocumentation .

因此,对于Hydra,一旦用户更改权限,表示操作的文档(特定于当前用户权限)可能会变得不合适 . 提出的恢复策略在访问第一次请求表示时缺少的新操作时不起作用 . 此问题可能适用于使用Wikipedia页面中解释的策略的任何系统 .

一旦用户登录,我就可以明确地请求新的表示,但我不认为这是一种非常分离的做事方式 .

我希望我的服务器对我的客户说:“嘿,你刚刚登录,现在你应该再次检查这个用户配置文件,因为你有新的访问权限 . ”

有没有惯用的方法呢?