2011-04-21 66 views
4

我正在研究一个具有CRM功能的大型Java EE web应用程序,我们正在寻找一种安全方法/库/解决方案/任何东西。基本的基于角色的安全性不起作用,因为访问控制必须基于角色的层次结构,但必须可选地针对每个文档进行定制。由于将存储保密和专有信息,因此要求安全性正常工作。如何管理大量的权限?

举例:要使用百货商店,货架潜行者储料机可以创建报告,其他储料机可以读取只有他们是在同一个部门。现在,他们的部门经理可以读/写/更新/删除所有由存货人撰写的报告,并撰写所有其他部门经理可以阅读的报告,但不能查看区域经理可以使用的商店经理等的报告。复杂性:高层人员可以让低层人员看到事物,或者向个人(部门向多个特定存储员写文档)或其下的每个人(店铺经理向整个商店写备忘录)或任何你可以想象的排列。此外,个人可以创建他们的同事看不到的报告,或者他们可以选择授予访问权限来存储其他地区的存储器等。

我们正在考虑一个ACL,每个实体只有一个权限,但担心大量记录会创建。即使只有一个30岁以上的部门的每个人都可以读懂报告(在指挥系统中),那么创建单个报告需要〜40条记录!每个用户每周有1个报告,每个用户每年有2000个权限。 1,500个用户意味着每年超过3,000,000个权限。

这似乎是一个规则引擎为基础的方法将是很好的,但所以我们不敢随便说的方法,我还没有看到任何博客或文章提的是方法。

我们也在考虑一些ACL /规则的自制混合,您可以授予一个部门ID与“经理”或“股东”等鉴别器的权限,但担心检查所有可能的权限你可以专门由其他用户授予权限,你有权为你的部门的memeber,你可以有权限的商店,或区)的成员听起来像一个容易出错的繁琐的噩梦。

我们的应用程序的最佳方法是什么?

回答

1

你可以看看使用Spring Security和ACL--有关Springs ACL实现的好处是它是用AoP实现的,它应该更易于集成。

听起来好像您的安全需求非常复杂 - 关闭我的头顶我不知道如何实现此操作..但是您可以通过创建ACL对象的层次结构和对象来减少所需的记录数从父对象'继承'权限。您授予用户读取权限一个报告的父 - 所以他们将继承该部门的子报告读访问。或者,管理员可能具有读取和更新部门的权限。所有这一切的关键是你的java对象模型的结构。

我有一个类似的情况,在一个系统中有数以千计的物品在业务单元 - 出版物 - 问题 - 文章。你可以有ACL的的hierarchys - 所以在我的系统 - 即有C/R/W权限到特定业务部门的用户,继承层次结构中的所有子对象的权限。

+0

春天ACL绝对是一个考虑因素。但是,我们希望分发应用程序,我们知道,我们必须在后端服务器上为每次调用它们创建一个新的安全上下文。我们不希望在前端安全,以便我们可以重复使用其他前端(可能是iPad应用)的安全性。这看起来很丑陋,不可取,但绝对可行。 – ArtB 2011-04-21 16:20:32