【问题标题】:How to manage a large number of permissions?如何管理大量权限?
【发布时间】:2011-04-21 14:35:47
【问题描述】:

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

示例:要使用百货商店,货架 stalkers 库存商可以创建报告,其他库存商只有在 时才能阅读> 他们在同一个部门。现在他们的部门经理可以读取/写入/更新/删除所有由库存商编写的报告,并编写所有其他部门经理可以阅读但看不到商店经理等的报告,区域经理可以读取/写入/读取/删除等. 现在,复杂性:较高级别的人可以让较低级别的人看到事情,无论是个人(部门向几个特定的​​库存商写文件)用户或他们下面的每个人(商店经理向整个商店写备忘录)或任何人你可以想象的排列。此外,个人可以创建他们的同龄人看不到的报告,或者他们可以选择授予对其他地区的存储库等的访问权限。

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

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

我们还在考虑一些 ACL/规则自制混合,您可以在其中授予具有“经理”或“库存员”等区分符的部门 ID 进行子选择的权限,但担心检查所有可能的权限(您可能会被其他用户专门授予权限,您拥有部门成员的权限,您可能拥有商店或地区成员的权限)听起来像是一个容易出错的乏味噩梦。

对我们的应用来说最好的方法是什么?

【问题讨论】:

    标签: java security jakarta-ee acl


    【解决方案1】:

    您可以考虑使用 Spring Security 和 ACL - Springs ACL 实现的好处是它是用 AoP 实现的,应该更容易集成。

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

    我在一个系统中遇到过类似的情况,Business Unit -- Publication -- Issue -- Article 的对象层次结构中有数千篇文章。您可以拥有 ACL 的层次结构 - 所以在我的系统中 - 对特定业务部门具有 C/R/W 权限的用户,继承了层次结构中所有子对象的权限。

    【讨论】:

    • Spring ACL 绝对是一个考虑因素。但是,我们希望分发应用程序,并且我们知道我们必须在后端服务器上为每次调用它们创建一个新的安全上下文。我们不想要前端的安全性,以便我们可以将安全性重用于备用前端(可能是 iPad 应用程序)。它看起来丑陋且不可取,但绝对可行。
    【解决方案2】:

    在我看来,定制 + 复杂性 = JBoss Drools,我没有太多使用这项技术的经验,但我相信你的案例值得一看,请查看最新的 drools 示例:http://blog.athico.com/2011/04/try-drools-example-in-less-than-minute.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2020-09-01
      • 2015-06-19
      相关资源
      最近更新 更多