高级访问控制库
我有兴趣为用户访问软件系统内的资源进行高级访问控制。 我在医疗保健IT方面工作,年轻的我经常低估医疗保健中基于angular色的访问控制的复杂性。 但是这个问题应该适用于任何具有复杂ACL要求的人。
相当长一段时间, php gacl一直是我用于处理Health IT系统内非常复杂的ACL控制问题的目标库。 但是我现在正在更多地使用javascript和具体的节点。 我已经searchnpm图书馆以一般化的方式做访问控制。
我想支持定义操作,而不仅仅是用户和资源(3层而不是2层),我希望拥有用户,操作和资源组,并且暗示我想拥有ACLinheritance权。
从“星球大战”主题手册到该图书馆的典型例子是这样的规则:
- 所有船员都有(访问,configuration和使用)枪支,引擎,驾驶舱和rest室,期待chewie。
- 所有机器人都(访问和使用)进入驾驶舱,但只有R2D2configuration访问引擎。
- 汉族拥有各种types的资源。
这里的基本概念包括你可以制定适用于任何一组用户(例如船员,乘客或机器人)或个人(汉和Chewie)的规则,你可以有不同types的访问(访问,configuration,使用)或者对不同资源(发动机和驾驶舱)进行访问(主机访问=configuration+修理+使用)组,也可以将其分组,(战斗站=驾驶舱+枪)。
这允许configuration非常复杂的访问控制规则,并且相对简单的基于组的pipe理。
到目前为止,我在php-gacl之外没有见过这样的东西。 我看了一下精彩的基于JavaScript的ACL项目,所有这些都宣传简单易用,而不是全面。 其他典型的php ACL库也是如此(例如Zend ACL )
是否有人在为节点“高级ACL”项目工作? 有没有更好的方法,我应该找的地方?
php-gacl有三个部分,一个是基于php的pipe理GUI(这是公认的过于复杂),另一个是规则上的CRUD API(可以很容易地转换成REST接口,我认为)和一个非常小的提供ACL检查function的文件。
从技术上讲,只有最后一个types需要完全移植到节点才能使该软件模型正常工作?
在更深层次上,我想了解哪些方法已经成功地用来处理这个问题。 这个问题通常如何解决? 对于那些根据node / javascript甚至特定的数据库方法(关系vs非关系)来有效讨论这个问题的人来说,奖励点。 我知道有很多理论基础来做这个对错(比如对RBAC和ACL有很多意见)。 我想要的是理论上坚实的东西,或者从图书馆的angular度来看,它仍然是“正常的”。 我专注于Javascript,但是理解其他语言如何解决这个问题实在是太好了。
如果你可以避免使用任何types的ACL,你通常会更好。 他们pipe理起来很复杂。 build模三个级别的安全检查会更好:
- URL / IP地址/或其他访问点安全检查
- 方法在资源检查。 无论您想要修改或操作的实体,都要对其进行权限检查。 IE业务规则访问types。
- 实体资源检查。 如果用户/ API / OAuth令牌可以访问AT ALL到实体
这可以使用RBAC来完成。 您的组织/网站的angular色分配有一组访问/修改/操作权限。 用户被分配一个或多个angular色,但三个级别的检查检查权限,而不是angular色。
我将Spring安全和RBAC作为一个谷歌search和模型。 以下是我发现有用的几个链接:
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中的所有'原始'例子和疯狂命名的检查,你会被build议阅读文章,提供使用Spring权限'hasRole()'检查替代名称和用法。 RBAC的devise)
(关于灵活使用Spring Security的一个很好的介绍,包括RBAC)
http://www.infoq.com/presentations/Spring-Security-3
(以下给出了对RBAC问题和解决scheme的良好描述,并且是为PHPdevise的)
http://www.tonymarston.net/php-mysql/role-based-access-control.html
一个具有RBAC实现的PHP框架:
http://trac.symfony-project.org/wiki/UserRbac
最后,Spring Security的类图。 您会注意到,它允许将安全信息放在PARALLEL表中给受保护的实体。 这是devise的,所以Spring Security可以稍后添加或取出,或者轻松地replace。 但是这也意味着更多的表格。