我使用Spring 3.0(Spring MVC,Spring Security,Spring Roo,Hibernate)制作软件即服务
我必须提出灵活的访问控制列表机制。我有三种不同的用户
现在我的问题是,我应该如何建模用户的实体?
如果我只是选择最终用户,它可以属于一个或多个组织,因此每个用户都可以包含一组对其组织的引用。但是我们如何为每个组织的用户角色建模,
因此,例如,用户用户体验属于组织og1,og2和og3,对于og1,他既是orgadmin,也是org-read-only-user,对于og2,他只是orgadmin,对于og3,他只是org-只读用户
我有可能让每个用户单独属于一个组织,但这会使系统受限制,我不喜欢这个想法(尽管我仍然满足要求)
如果您有更好的可扩展ACL架构,请提出建议。由于它是一种软件即服务,人们可以预期,如果使用相同的系统,很多不同的组织将会成为其中的一部分。我有一个担心,将og1和og2数据保存在同一个数据库上并不是一个好主意(如果og1决定在系统上产生100个报告,og2不应该受到影响)但这是现在提前做的一些事情而不是与ACL直接相关,但与数据的物理分布和基于这些ACL的服务设置
有关这是一个社区Wiki问题,请更正您希望执行的任何操作。 感谢
答案 0 :(得分:2)
一个用户可以属于多个组织并且他/她可以在一个组织内拥有多个角色,这没有任何问题。在典型的基于角色的访问控制模型中,您可以拥有组。角色可以是全局角色(如系统管理员),也可以只在组内有效。您受保护的数据元素需要相应地拆分成组。当用户访问一个数据组时,您将首先检查他/她是否拥有该组的权限。然后加载他/她对该组的权利。除非您使用自己的aclservice进行扩展,否则使用spring security acl很难做到这一点。这就像spring acl filter的性能问题。最终,您必须以某种方式将您的某些安全性连接到您的业务逻辑中。