我有两种不同的服务:用户和文档。
用户服务的主要资源是用户(users.example.com/users/:userId
),并通过帐户和support-admin权限管理对用户的访问控制。
文档服务拥有文档资源(documents.example.com/documents/:docId
)。文档具有广泛的访问控制权,因为它们可以共享,发布,包含在共享文件夹中等。在获取文档时,它将引用某些用户(例如所有者,或最后一位编辑文档的人)。
"document": {
...
"owner": "users.example.com/users/:userId",
...
}
任何获取文档的人也应该有权获取有关这些用户的用户信息(firstName,lastName等)。但是,如果我们仅返回用户URI(users.example.com/users/:userId
),则它们将必须传递用户服务的访问控制,这些访问控制对于文档的共享/发布/等方式一无所知。用户服务不能依赖于文档服务,因为文档服务已经依赖于用户服务。
我想出的解决方案是在Document-service中创建一个新的端点,该端点还返回用户信息(documents.example.com/documents/:docId/owner
)。它将通过文档检查访问控制,从用户服务中获取用户信息(使用系统用户身份验证),然后将用户信息返回给调用者。我不喜欢这种解决方案,因为文档服务本质上只是代理用户服务资源。同时,我无法提出更好的建议。好奇是否有人想到了这个问题并且有什么见识?