代码之家  ›  专栏  ›  技术社区  ›  Community wiki

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

  •  2
  • Community wiki  · 技术社区  · 2 年前

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

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

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

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

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

    因此,例如,用户UX属于组织og1、og2和og3,对于og1,他既是组织管理员,又是组织只读用户,其中对于og2,他只是组织管理员,对于og3,他只是机构只读用户

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

    如果你有一个更好的可扩展ACL体系结构,请推荐它。由于它是一种软件即服务,如果是同一个系统,那么很多不同的组织都会成为其中的一部分。我有一个担心,将og1和og2数据保留在同一个DB上不是一个好主意(如果og1决定在系统上生成100个报告,og2就不应该受到影响)。但这是目前先进的技术,与ACL无关,而是与数据的物理分布和基于这些ACL的服务设置有关

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

    1 回复  |  直到 16 年前
        1
  •  2
  •   h0cked    16 年前

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