高级访问控制库

时间:2013-01-01 03:09:35

标签: php javascript node.js acl rbac

我有兴趣为用户执行高级访问控制以访问软件系统中的资源。我在医疗保健IT方面工作,年轻的我经常低估role-based access control in healthcare的复杂性。但是这个问题应该适用于具有复杂ACL要求的任何人。

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

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

the Star Wars themed manual到该库的经典示例是以下规则:

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

1 个答案:

答案 0 :(得分:3)

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

  1. URL / IP地址/或其他接入点安全检查
  2. 资源检查方法。无论你想修改或操纵什么实体,都要对其进行权限检查。 I.E.业务规则访问类型。
  3. 实体资源检查。如果用户/ API / OAuth令牌具有对实体的访问权限
  4. 这可以使用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的类图。您会注意到它允许将PARALLEL表中的安全信息放入受保护的实体中。这是设计使得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