我有兴趣为用户执行高级访问控制以访问软件系统中的资源。我在医疗保健IT方面工作,年轻的我经常低估role-based access control in healthcare的复杂性。但是这个问题应该适用于具有复杂ACL要求的任何人。
很长一段时间php gacl一直是我的首选库,用于处理Health IT系统内部非常复杂的ACL控制问题。但我现在正在更多地使用javascript和节点。我已经在npm中搜索了库,以便以通用的方式进行访问控制。
我想支持定义操作而不仅仅是用户和资源(3层而不是2),我想拥有用户,操作和资源组,并且暗示我希望拥有ACL继承。
从the Star Wars themed manual到该库的经典示例是以下规则:
这里的基本概念包括这样的概念:您可以制定适用于任意一组用户(即机组人员,乘客或机器人)或个人(Han和Chewie)的规则,您可以拥有不同类型的访问权限(访问,配置,使用)或访问组(维护访问=配置+修复+使用)到不同的资源(引擎和驾驶舱),也可以分组,(战斗站=驾驶舱+枪支)。
这允许配置极其复杂的访问控制规则,具有相对简单的基于组的管理。
到目前为止,我在php-gacl之外没有看到过这样的内容。我已经看了一下基于javascript的精彩ACL项目,所有这些项目都宣传简单易用,而不是全面。其他典型的php ACL库(即Zend ACL)
也是如此有人在为节点工作“高级ACL”项目吗?是否有一个更好的方法,我应该在某处寻找?
php-gacl有三个部分,一个是基于php的管理GUI(这无疑是过于复杂的),以及一个关于规则的CRUD的API(我认为可以很容易地转换为REST接口)和一个非常小的文件,提供ACL检查功能。从技术上讲,只有最后一种类型需要完全移植到节点才能使该软件模型正常工作?
在更深层次上,我想了解哪些方法已成功用于处理此问题。这个问题通常如何解决?对于那些根据节点/ javascript甚至特定数据库方法(关系与非关系)有效讨论此问题的人的奖励积分。我知道有很多理论基础来做这个对/错(即对RBAC和ACL有很多意见)。我想要的是理论上坚实的,或几乎坚实的东西,从图书馆的角度来看仍然“正常”。我专注于Javascript,但是理解其他语言如何实际解决这个问题会很好。
答案 0 :(得分:3)
如果您可以避免使用任何类型的ACL,通常情况下会更好。它们管理起来很复杂。您最好建模三级安全检查:
这可以使用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的设计中
(关于灵活使用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可以在以后添加,取出或轻松替换。但它也意味着更多的桌子。