2

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

我必须想出一个灵活的访问控制列表机制。我有三种不同类型的用户

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

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

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

例如,用户 UX 属于组织 og1、og2 和 og3,对于 og1,他既是 orgadmin 又是 org-read-only-user,而对于 og2,他只是 orgadmin,对于 og3,他只是 org-read-only -用户

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

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

这是一个社区 Wiki 问题,请更正您希望这样做的任何内容。谢谢

4

1 回答 1

2

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

于 2010-07-30T03:21:47.387 回答