2013-01-01 66 views
5

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

相当一段时间php gacl一直是我去到库处理医疗IT系统里面非常复杂的ACL控制问题的目的。但我现在通常更多地使用javascript,特别是节点。我已经搜索npm的图书馆以一般化的方式进行访问控制。

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

经典的例子是一样的规则:

  • 船员们的所有成员(访问,配置和使用)访问 枪,发动机,座舱和休息,期待chewie。
  • 所有机器人都(访问和使用)进入驾驶舱,但只有R2D2有 的发动机配置的访问。
  • 韩有所有类型的资源访问所有类型的 资源。这里

的基本概念,包括概念,你可以应用到用户的任一组(即船员,乘客或机器人)或个人规则(汉和Chewie),你可以有不同类型的访问(战斗站=驾驶舱+枪支)对不同资源(发动机和驾驶舱)进行访问(访问,配置,使用)或访问组(访问,配置+修理+使用)。

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

到目前为止,我在php-gacl之外没有见过这样的东西。我看了一下精彩的基于javascript的ACL项目,并且他们都宣传简单易用而不是全面。这也是其他典型的PHP ACL库的真实(即Zend ACL

是否有人正在为节点的“高级访问控制列表”的项目?有没有更好的方法可以找到我应该寻找的地方? (这可以说是过于复杂),以及一个规则上的CRUD API(可以很容易地转换为我认为的REST接口)的API,和一个提供ACL检查功能的非常小的文件。

技术上,只有最后一种需要被完全移植到节点,为了使这种软件模型的工作?

在更深层次上,我想了解哪些方法已成功用于处理此问题。这个问题通常如何解决?对于那些通过节点/ javascript甚至特定的数据库方法(关系vs非关系)有效讨论这个问题的人来说,奖励点。我知道有很多理论基础来做这个对错(即对RBAC和ACL有很多意见)。我想要的是理论上坚实的东西,或者说从图书馆的角度来看,它仍然“刚刚起作用”。我专注于Javascript,但很好理解其他语言如何解决这个问题。

+0

这是关于堆栈溢出的主题。 – 2013-01-01 04:46:37

回答

3

如果你可以避免使用任何类型的ACL,你通常会更好。他们管理起来很复杂。你会好起来的造型三级安全检查:

  1. URL/IP地址/或其他的accessPoint安全检查
  2. 方法在资源检查。无论你想修改或操纵你的实体,都要对其进行权限检查。 I.E.业务规则类型的访问。
  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/

(在春季安全灵活的用途,包括RBAC好介绍)

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

(以下给出了RBAC的问题和解决方案的一个很好的说明,而且是专为PHP)

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

一个PHP框架用RBAC实现:

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