Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何管理大量权限?_Java_Security_Jakarta Ee_Acl - Fatal编程技术网

Java 如何管理大量权限?

Java 如何管理大量权限?,java,security,jakarta-ee,acl,Java,Security,Jakarta Ee,Acl,我正在开发一个带有CRM功能的大型Java EE web应用程序,我们正在寻找一种安全方法/库/解决方案/任何东西。基本的基于角色的安全性将不起作用,因为访问控制必须同时基于角色和层次结构,但必须可选地针对每个文档进行自定义。由于将存储机密和专有信息,因此要求安全机制正常工作 示例:要使用百货公司,货架跟踪者-存货人可以创建报告,其他存货人只有在同一部门才能阅读。现在,他们的部门经理可以读/写/更新/删除所有库存人员编写的报告,并编写所有其他部门经理都可以阅读但看不到门店经理报告的报告,区域经理

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

示例:要使用百货公司,货架跟踪者-存货人可以创建报告,其他存货人只有在同一部门才能阅读。现在,他们的部门经理可以读/写/更新/删除所有库存人员编写的报告,并编写所有其他部门经理都可以阅读但看不到门店经理报告的报告,区域经理可以对其进行r/w/u/d等。现在,复杂的情况是:上级人员可以让下级人员看到事情,无论是给个人(部门向几个特定的库存商写入文档)用户,还是给他们下面的每个人(门店经理向整个门店写入备忘录),或者是你可以想象的任何排列。此外,个人可以创建他们的同龄人看不到的报告,或者他们可以选择向其他地区的商店存货商授予访问权限等

我们正在考虑一个ACL,每个实体有一个权限,但担心会创建大量记录。即使只有一份报告是一个30人的部门和他们上面的每个人(在指挥链中)都可以阅读的,创建一份报告也需要大约40条记录!每个用户每周有1份报告,即每个用户每年有2000个权限。1500个用户意味着每年超过300万个权限

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

我们也在考虑一些ACL/rule home brew混合模式,您可以向具有“经理”或“库存商”等鉴别器的部门id授予再选择权限,但担心检查所有可能的权限(你可以被另一个用户特别授予权限,你可以作为你部门的成员,你可以作为商店或地区的成员)听起来像是一个容易出错的沉闷噩梦


对于我们的应用程序,什么是最好的方法?

您可以看看使用Spring安全性和ACL——Spring ACL实现的好处是它是用AoP实现的,应该更容易集成

听起来您的安全要求相当复杂-我不知道您将如何实现这一点。但是您可以通过针对对象层次结构创建ACL并使对象从父对象“继承”权限来减少所需的记录数。您可以向父对象授予用户读权限报告的部门——因此他们将继承对该部门的子报告的读取权限。或者,经理可能拥有对该部门的读取和更新权限。所有这些的关键是java对象模型的结构


我在一个系统中也遇到过类似的情况,在一个业务单元的对象层次结构中有数千篇文章--发布--发布--文章。您可以拥有ACL的层次结构--因此在我的系统中--对特定业务单元拥有C/R/W权限的用户,继承了hie中所有子对象的权限rarchy.

在我看来,Customization+Complexity=JBoss Drools,我没有太多使用这项技术的经验,但我相信在您的案例中值得一看,查看最新的Drools示例:

Spring ACL绝对是一个考虑因素。但是,我们希望分发该应用程序,我们理解我们将然后,uld必须为每次呼叫在后端服务器上创建新的安全上下文。我们不希望前端有安全性,以便我们可以将安全性重新用于备用前端(可能是iPad应用程序)。这看起来很难看,也不可取,但绝对可行。