Sle*_*led 5 java security acl java-ee
我正在开发具有CRM功能的大型Java EE Web应用程序,我们正在寻找安全性方法/库/解决方案/任何东西。基本的基于角色的安全性将无法正常工作,因为访问控制必须同时基于角色和层次结构,但必须可以选择对每个文档进行自定义。因为将存储机密和专有信息,所以安全性必须正常工作。
示例:要使用百货商店,货架缠扰者存货商可以创建报告,其他存货商只能在以下情况下阅读他们在同一个部门。现在,他们的部门经理可以读取/写入/更新/删除库存人员编写的所有报告,并编写报告,所有其他部门经理可以阅读但看不到商店经理的报告等,而区域经理可以对它们进行读/写/读/写等现在,问题变得复杂了:较高级别的人员可以使较低级别的人员可以看到东西,无论是个人(部门将文档写给几个特定的库存商)的用户,还是其下的每个人(商店经理向整个商店写备忘录)或您可以想象的排列。此外,个人可以创建其同事无法看到的报告,也可以选择授予对其他地区的商店库存者的访问权限。
我们正在考虑对每个实体授予一个权限的ACL,但担心会创建大量记录。即使只有一个报告对30人的部门中的每个人及其上方的每个人(在命令链中)可读,创建一个报告也将需要约40条记录!每个用户每周有1个报告,即每个用户每年2000个权限。1,500个用户意味着每年超过3,000,000个权限。
看起来基于规则引擎的方法似乎不错,但是我没有看到任何博客或文章提到该方法,因此我们对这种方法感到犹豫。
我们还在考虑使用某些ACL /规则自酿混合功能,您可以在其中授予区分“ manager”或“ stockers”等标识符的部门ID进行子选择,但担心检查所有可能的权限(您可能会被授予特别是由另一个用户授予的许可,您有权作为部门的成员,您可能具有作为商店或区域成员的许可),听起来像是容易出错的繁琐噩梦。
什么是我们应用程序的最佳方法?
您可以考虑使用 Spring Security 和 ACL - Springs ACL 实现的好处是它是使用 AoP 实现的,应该更容易集成。
听起来您的安全要求非常复杂 - 我不知道您将如何实现这一点..但是您可以通过针对对象层次结构创建 ACL 并让对象“继承”权限来减少所需的记录数量来自父对象。您授予用户对报表的父部门的读取权限- 这样他们就可以继承对该部门的子报表的读取权限。或者,经理可能具有部门的读取和更新权限。这一切的关键是你的java对象模型是如何构建的。
我在一个系统中也遇到过类似的情况,其中业务单元-出版-发行-文章的对象层次结构中有数千篇文章。您可以拥有 ACL 的层次结构 - 因此在我的系统中 - 对特定业务单位具有 C/R/W 权限的用户继承了层次结构中所有子对象的权限。