如何管理大量权限?

时间:2011-04-21 14:35:47

标签: java security java-ee acl

我正在开发一个具有CRM功能的大型Java EE网络应用程序,我们正在寻找安全方法/库/解决方案/任何东西。基本的基于角色的安全性将不起作用,因为访问控制必须基于角色层次结构,但必须可选择根据文档进行自定义。由于存储了机密和专有信息,因此要求安全性正常运行。

示例:要使用百货商店,货架潜行者储料商可以创建报告,其他储料商只有在 >他们在同一个部门。现在,他们的部门经理可以读/写/更新/删除由储存者撰写的所有报告,并编写所有其他部门经理可以阅读的报告,但不会看到商店经理等的报告,地区经理可以使用他/她/她/等等现在,复杂性:较高层次的人可以让较低级别的人看到事物(个人(部门写入文件给几个特定的​​储存者)用户或他们下面的每个人(商店经理给整个商店写一份备忘录)或任何你可以想象的排列。此外,个人可以创建他们的同事看不到的报告,或者他们可以选择授权访问其他地区的商店储存者等。

我们正在考虑一个ACL,每个实体有一个权限,但是担心会创建大量记录。即使只有一个报告对30个部门的每个人以及他们之上的每个人[在命令链]中都是可读的,创建一个报告就需要大约40个记录!每个用户每周有1个报告,即每个用户每年2000个权限。 1,500名用户意味着每年超过3,000,000个权限。

似乎基于规则引擎的方法会很好,但我没有看到任何博客或文章提到这种方法,所以我们对这种方法犹豫不决。

我们也正在考虑一些ACL /规则家酿混合,你可以授权部门ID与“经理”或“储存器”等鉴别器进行分选,但担心检查所有可能的权限(你可以由另一个用户特别授予许可,你有权作为你所在部门的成员,你可以作为商店或地区的成员获得许可,这听起来像是一个容易出错的繁琐噩梦。

我们申请的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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

听起来你的安全要求非常复杂 - 我不知道你是如何实现这个...但是你可以减少创建ACL对你的对象层次结构和拥有对象所需的记录数量继承父对象的权限。您授予用户对报告的父部门的读取权限 - 因此他们将继承对该部门的子报告的读取权限。或者,Manager可能具有对部门的读取和更新权限。这一切的关键是如何构建java对象模型。

我的系统中存在类似的情况,其中业务部门 - 出版物 - 问题 - 文章的对象层次结构中有数千篇文章。您可以拥有ACL的层次结构 - 所以在我的系统中 - 对特定业务单位具有C / R / W权限的用户,对层次结构中所有子对象的继承权限。

答案 1 :(得分:1)

在我看来,Customization + Complexity = JBoss Drools,我没有太多使用这项技术的经验,但我相信在您的情况下值得一看,请查看最新的drools样本:http://blog.athico.com/2011/04/try-drools-example-in-less-than-minute.html < / p>