软件的ACL体系结构作为Spring 3.0中的服务

时间:2010-03-12 18:40:39

标签: hibernate spring spring-security spring-roo

我使用Spring 3.0(Spring MVC,Spring Security,Spring Roo,Hibernate)制作软件即服务

我必须提出灵活的访问控制列表机制。我有三种不同的用户

  • 系统(谁可以对系统做任何事情,包括管理员和内部守护进程)
  • 操作(可以代表用户和组织添加和删除用户,组织以及执行维护工作)
  • 最终用户(他们属于一个或多个组织,对于每个组织,用户可以拥有一个或多个角色,如组织管理员或组织只读成员) (像orgadmin这样的角色也可以为该组织添加用户)

现在我的问题是,我应该如何建模用户的实体?

如果我只是选择最终用户,它可以属于一个或多个组织,因此每个用户都可以包含一组对其组织的引用。但是我们如何为每个组织的用户角色建模,

因此,例如,用户用户体验属于组织og1,og2和og3,对于og1,他既是orgadmin,也是org-read-only-user,对于og2,他只是orgadmin,对于og3,他只是org-只读用户

我有可能让每个用户单独属于一个组织,但这会使系统受限制,我不喜欢这个想法(尽管我仍然满足要求)

如果您有更好的可扩展ACL架构,请提出建议。由于它是一种软件即服务,人们可以预期,如果使用相同的系统,很多不同的组织将会成为其中的一部分。我有一个担心,将og1和og2数据保存在同一个数据库上并不是一个好主意(如果og1决定在系统上产生100个报告,og2不应该受到影响)但这是现在提前做的一些事情而不是与ACL直接相关,但与数据的物理分布和基于这些ACL的服务设置

有关

这是一个社区Wiki问题,请更正您希望执行的任何操作。 感谢

1 个答案:

答案 0 :(得分:2)

一个用户可以属于多个组织并且他/她可以在一个组织内拥有多个角色,这没有任何问题。在典型的基于角色的访问控制模型中,您可以拥有组。角色可以是全局角色(如系统管理员),也可以只在组内有效。您受保护的数据元素需要相应地拆分成组。当用户访问一个数据组时,您将首先检查他/她是否拥有该组的权限。然后加载他/她对该组的权利。除非您使用自己的aclservice进行扩展,否则使用spring security acl很难做到这一点。这就像spring acl filter的性能问题。最终,您必须以某种方式将您的某些安全性连接到您的业务逻辑中。