我的问题是使用RavenDb和授权包保护跨文档的文档:
我有一个“帐户”服务,负责管理所有“用户”。
我有一个“消息传递”服务,负责所有“消息传递”,即墙上帖,对话等。
要跟踪谁在此服务中执行了什么操作,当发布新消息时,我创建消息和两个UserProxy对象(删除仅具有UserId和UserName属性的User对象 - 这些对象存储为WallPost doc上的子对象,以便它们本身不是文件)
当用户向其他用户发布内容时,我只想允许:
我还有一个负责图像/视频的媒体服务,一个适用于所有音乐事件的MusicEvent服务 - 他们都需要有类似的设置。
我的问题是:
*如果帐户服务存储具有角色和权限的主用户 - 当要求用户时,它可以发回带有角色和权限的dto(可能会变得粗糙)
* Messaging Service是否应该维护自己的用户副本 - 拥有自己的一组角色和权限?
首先是简单的向前移动,因为它是集中的 - 但对我来说看起来有点狡猾 第二个可能更好,但问题出现在AccountService更改用户名时 - 我可以向esb发送一个事件并让所有相关服务接收并处理更新 - 但这听起来很复杂。
FTR - 我摇摆到选项2 - 非集中方法。
答案 0 :(得分:0)
就个人而言,我会考虑引入第三项服务 - 例如负责角色和权限的IT /管理服务。我觉得这些是与帐户或消息服务中描述的不同的业务功能/能力。负责此类功能的服务会将服务的安全性方面与Accounts和Messaging的实际功能区域分离。帐户仍然可以保留帐户信息的所有者。消息传递服务实际上只需要识别用户,因此使用用户ID /用户名就足够了,除非它需要附加的用户信息来完成其工作(可能是电子邮件地址)。只要Accounts仍然是信息的所有者,它就可以在这个实例中复制数据。
答案 1 :(得分:0)
http://ayende.com/Blog/archive/2011/02/17/distributed-authorization-with-ravendb.aspx