【问题标题】:Advanced Access Control Libraries [closed]高级访问控制库[关闭]
【发布时间】:2012-12-15 23:12:33
【问题描述】:

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

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

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

the Star Wars themed manual 到该库的经典示例如下:

  • 所有机组成员都可以(访问、配置和使用)访问 枪、引擎、驾驶舱和休息室,期待着咀嚼。
  • 所有机器人都可以(访问和使用)驾驶舱,但只有 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,但很高兴了解其他语言实际上是如何解决这个问题的。

【问题讨论】:

  • 这与堆栈溢出无关。

标签: php javascript node.js acl rbac


【解决方案1】:

如果您可以避免使用任何类型的 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 的类图。您会注意到,它允许将安全信息放在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2016-05-04
    • 2021-10-02
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多