我有兴趣为用户执行高级访问控制以访问软件系统中的资源。我在医疗保健 IT 部门工作,年轻的我经常低估医疗保健中基于角色的访问控制的复杂性。但是这个问题应该适用于任何具有复杂 ACL 要求的人。
很长一段时间以来, php gacl一直是我的首选库,用于处理 Health IT 系统中非常复杂的 ACL 控制问题。但我现在更多地使用一般的 javascript 和专门的节点。我已经在 npm 中搜索了库,以便以可概括的方式进行访问控制。
我希望支持定义操作而不仅仅是用户和资源(3 层而不是 2 层),并且我希望拥有用户、操作和资源组,并且暗示我希望拥有 ACL 继承。
从《星球大战》主题手册到该库的经典示例是以下规则:
- 所有机组成员都可以(访问、配置和使用)进入枪支、发动机、驾驶舱和休息室,期待咀嚼。
- 所有机器人都可以(访问和使用)驾驶舱,但只有 R2D2 可以配置访问引擎。
- Han 可以访问所有类型的资源。
这里的基本概念包括您可以制定适用于用户组(即机组人员、乘客或机器人)或个人(Han 和 Chewie)的规则,您可以拥有不同类型的访问权限(访问、配置、使用) 或访问组(维护访问 = 配置 + 维修 + 使用)对不同资源(发动机和驾驶舱)的访问也可以分组(战斗站 = 驾驶舱 + 枪支)。
这允许通过相对简单的基于组的管理来配置非常复杂的访问控制规则。
到目前为止,我在 php-gacl 之外还没有看到类似的东西。我查看了基于 javascript 的精彩 ACL 项目,所有这些项目都宣传简单易用,而不是全面。这也适用于其他典型的 php ACL 库(即Zend ACL)
有人在为节点开发“高级 ACL”项目吗?我应该在某个地方寻找更好的方法吗?
php-gacl 包含三个部分,一个是基于 php 的管理 GUI(诚然过于复杂),一个用于 CRUD 规则的 API(我认为可以很容易地转换为 REST 接口)和一个非常小的提供 ACL 检查功能的文件。
从技术上讲,只有最后一种类型需要完全移植到节点才能使该软件模型工作?
在更深层次上,我想了解成功使用了哪些方法来处理这个问题。这个问题通常是如何解决的?对于那些根据节点/javascript甚至可能甚至是特定的数据库方法(关系与非关系)有效讨论此问题的人的奖励积分。我知道做这个正确/错误有很多理论基础(即对 RBAC 和 ACL 有很多意见)。我想要的是理论上可靠的东西,或者从图书馆的角度来看仍然“正常工作”的几乎可靠的东西。我专注于 Javascript,但很高兴了解其他语言实际上是如何解决这个问题的。