高级访问控制库

ftr*_*ter 5 javascript php acl rbac node.js

我有兴趣为用户执行高级访问控制以访问软件系统中的资源.我在医疗保健IT领域工作,年轻的我经常低估医疗保健中基于角色的访问控制的复杂性.但是这个问题应该适用于具有复杂ACL要求的任何人.

很长一段时间以来,php gacl一直是我的首选库,用于处理Health IT系统内部非常复杂的ACL控制问题.但我现在正在更多地使用javascript和节点.我已经在npm中搜索了库以便以通用的方式进行访问控制.

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

星球大战主题手册到该库的经典示例是以下规则:

  • 所有船员都有(访问,配置和使用)进入枪支,发动机,驾驶舱和休息室,期待chewie.
  • 所有机器人都有(访问和使用)访问驾驶舱,但只有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,但是理解其他语言如何实际解决这个问题会很好.

Den*_*nis 3

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

  1. URL/IP 地址/或其他接入点安全检查
  2. 资源检查方法。无论您想要修改或操作什么实体,都可以对其进行权限检查。IE 业务规则访问类型。
  3. 实体资源检查。如果用户/API/OAuth 令牌有权访问实体

这可以使用 RBAC 来完成。您的组织/站点的每个角色都分配有一组访问/修改/操作权限。用户被分配一个角色,但三个级别的检查检查权限,而不是角色。

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

http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/

http://www.xaprb.com/blog/2006/08/18/role-based-access-control-in-sql-part-2/

(因为 Spring Security 中的所有“原始”示例和疯狂命名检查,建议您阅读提供替代名称的使用以及 Spring 权限“hasRole()”检查的用途的文章。以下文章在RBAC 的设计)

http://springinpractice.com/2010/10/27/quick-tip-spring-security-role-based-authorization-and-permissions/

(关于 Spring Security 灵活使用的精彩演示,包括 RBAC)

http://www.infoq.com/presentations/Spring-Security-3

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

http://www.tonymarston.net/php-mysql/role-based-access-control.html

具有 RBAC 实现的 PHP 框架:

http://trac.symfony-project.org/wiki/UserRbac

最后是 Spring Security 的类图。您会注意到,它允许将安全信息放入受保护实体的并行表中。这是设计使然,以便以后可以轻松添加、删除或替换 Spring Security。但这也意味着更多的桌子。

http://code.google.com/p/uclm-esi-alarcos/source/browse/trunk/documentation/memoria-pfc/Figuras/Cap5/spring-security-class-diagram.png?r=295