RavenDb授权+ SOA

时间:2011-02-17 08:15:34

标签: authorization soa ravendb

我的问题是使用RavenDb和授权包保护跨文档的文档:

我有一个“帐户”服务,负责管理所有“用户”。

我有一个“消息传递”服务,负责所有“消息传递”,即墙上帖,对话等。

要跟踪谁在此服务中执行了什么操作,当发布新消息时,我创建消息和两个UserProxy对象(删除仅具有UserId和UserName属性的User对象 - 这些对象存储为WallPost doc上的子对象,以便它们本身不是文件)

当用户向其他用户发布内容时,我只想允许:

  • 删除/修改原始海报,收件人和管理员
  • 查看原始海报,收件人,管理员和收件人的所有朋友

我还有一个负责图像/视频的媒体服务,一个适用于所有音乐事件的MusicEvent服务 - 他们都需要有类似的设置。

我的问题是:

*如果帐户服务存储具有角色和权限的主用户 - 当要求用户时,它可以发回带有角色和权限的dto(可能会变得粗糙)

* Messaging Service是否应该维护自己的用户副本 - 拥有自己的一组角色和权限?

首先是简单的向前移动,因为它是集中的 - 但对我来说看起来有点狡猾 第二个可能更好,但问题出现在AccountService更改用户名时 - 我可以向esb发送一个事件并让所有相关服务接收并处理更新 - 但这听起来很复杂。

FTR - 我摇摆到选项2 - 非集中方法。

2 个答案:

答案 0 :(得分:0)

就个人而言,我会考虑引入第三项服务 - 例如负责角色和权限的IT /管理服务。我觉得这些是与帐户或消息服务中描述的不同的业务功能/能力。负责此类功能的服务会将服务的安全性方面与Accounts和Messaging的实际功能区域分离。帐户仍然可以保留帐户信息的所有者。消息传递服务实际上只需要识别用户,因此使用用户ID /用户名就足够了,除非它需要附加的用户信息来完成其工作(可能是电子邮件地址)。只要Accounts仍然是信息的所有者,它就可以在这个实例中复制数据。

答案 1 :(得分:0)

Ayende在他的博客上很好地回答了这个问题:

http://ayende.com/Blog/archive/2011/02/17/distributed-authorization-with-ravendb.aspx