Php 高级访问控制库

Php 高级访问控制库,php,javascript,node.js,acl,rbac,Php,Javascript,Node.js,Acl,Rbac,我对为用户执行高级访问控制以访问软件系统中的资源感兴趣。我在医疗IT部门工作,一个年轻的me经常低估了IT的复杂性。但是这个问题应该适用于任何具有复杂ACL需求的人 为了处理健康IT系统中非常复杂的ACL控制问题,我访问了库已经有相当一段时间了。但我现在更多地使用javascript,尤其是节点。我在npm中搜索了一些库,以便以一种通用的方式进行访问控制 我希望支持定义操作,而不仅仅是用户和资源(3层而不是2层),我希望有用户、操作和资源组,并且暗示我希望有ACL继承 从到该库的经典示例如下:

我对为用户执行高级访问控制以访问软件系统中的资源感兴趣。我在医疗IT部门工作,一个年轻的me经常低估了IT的复杂性。但是这个问题应该适用于任何具有复杂ACL需求的人

为了处理健康IT系统中非常复杂的ACL控制问题,我访问了库已经有相当一段时间了。但我现在更多地使用javascript,尤其是节点。我在npm中搜索了一些库,以便以一种通用的方式进行访问控制

我希望支持定义操作,而不仅仅是用户和资源(3层而不是2层),我希望有用户、操作和资源组,并且暗示我希望有ACL继承

从到该库的经典示例如下:

  • 所有机组成员都可以(访问、配置和使用)访问 枪、引擎、驾驶舱和休息室,除了丘伊
  • 所有机器人都可以(访问和使用)进入驾驶舱,但只有R2D2可以 配置对引擎的访问权限
  • 韩寒拥有所有类型的访问权限 资源类型
这里的基本概念包括,您可以制定适用于用户组(即乘员、乘客或机器人)或个人(Han和Chuie)的规则,您可以对不同的资源进行不同类型的访问(访问、配置、使用)或访问组(维护访问=配置+修复+使用)(发动机和驾驶舱)也可以分组(战斗站=驾驶舱+火炮)

这允许配置非常复杂的访问控制规则,并进行相对简单的基于组的管理

到目前为止,除了php gacl之外,我还没有看到任何类似的情况。我看了一些很棒的基于javascript的ACL项目,它们都宣传简单易用,而不是全面性。其他典型的php ACL库(即

是否有人在为node开发“高级ACL”项目?是否有更好的方法,我应该在某处寻找

php gacl包含三个部分,一个是基于php的管理GUI(承认过于复杂),一个用于规则CRUD的API(我认为可以轻松转换为REST接口)和一个提供ACL检查功能的非常小的文件

从技术上讲,只有最后一种类型需要完全移植到节点上,软件模型才能工作


在更深层次上,我想了解成功地使用了哪些方法来处理这个问题。这个问题通常是如何解决的?对于那些有效地从节点/javascript甚至是特定数据库方法(关系与非关系)方面讨论这个问题的人来说,这是一个额外的点.我知道做对/错这件事有很多理论基础(即对RBAC和ACL有很多看法)。我想要的是理论上可靠的,或几乎可靠的,仍然“正常工作”的东西从库的角度来看。我专注于Javascript,但了解其他语言如何实际解决此问题将是一件好事。

如果您可以避免使用任何类型的ACL,通常会更好。它们的管理非常复杂。您最好对三个级别的安全检查建模:

  • URL/IP地址/或其他访问点安全检查
  • 方法。您要修改或操作的任何实体都要对其进行权限检查,即业务规则访问类型
  • 实体资源检查。如果用户/API/OAuth令牌有权访问实体
  • 这可以使用RBAC完成。为组织/站点的每个角色分配一组访问/修改/操作权限。为用户分配一个角色,但三个级别的检查检查权限,而不是角色

    我将Spring Security和RBAC视为谷歌搜索,并以此为模型。以下是一些我发现有用的链接:

    (由于Spring Security中的所有“原始”示例和疯狂命名的检查,建议您阅读一些文章,这些文章提供了Spring权限“hasRole()”检查的替代名称和用法。下面的文章将在RBAC的设计中讨论这一点)

    (关于灵活使用Spring安全性(包括RBAC)的良好演示)

    (下面很好地描述了RBAC问题和解决方案,是为PHP设计的)

    带有RBAC实现的PHP框架:

    最后是Spring安全性的类图。您会注意到,它允许将安全性信息放在一个与受保护的实体并行的表中。这是经过设计的,这样Spring安全性可以在以后添加、删除或替换。但这也意味着更多的表


    这是堆栈溢出的主题。