基于角色的访问控制
Posted
技术标签:
【中文标题】基于角色的访问控制【英文标题】:Role Based Access Control 【发布时间】:2010-09-11 22:17:57 【问题描述】:是否有任何开源的、php based
、系统可用于CodeIgniter
?
【问题讨论】:
【参考方案1】:也许我误解了这个问题,但基于角色的访问控制 (RBAC) 的全部意义不是避免访问控制列表 (ACL) 吗?
RBAC 与访问控制列表 (ACL) (...) 的不同之处在于,它将权限分配给组织中有意义的特定操作,而不是分配给低级数据对象。例如,访问控制列表可用于授予或拒绝对特定系统文件的写访问权限,但它不会说明可以以何种方式更改该文件。在基于 RBAC 的系统中,操作可能是在金融应用程序中创建“信用账户”交易 (...)。分配执行特定操作的权限是有意义的,因为这些操作是细粒度的,并且它们本身在应用程序中具有意义。 (引用:Wikipedia)
我不知道 Zend_ACL 或提到的其他实现的细节,但如果它们是基于 ACL 的,我不建议将它们用于基于角色的授权。
【讨论】:
我也有同样的看法,认为这个问题可以接受错误的答案.. ACL 和 RBAC 有很大的不同,对于 RBAC 的问题可以接受 ACL 解决方案.. Pedantry:“我不建议将它们用于基于角色的身份验证。”访问控制 != 身份验证 是的,更重要的是 ACL != RBAC ^_^ @SpainTrain:您当然是对的 - 我已将其更改为“基于角色的授权”【参考方案2】:Brandon Savage 介绍了他的 PHP 包“ApplicationACL”,它可能会也可能不会实现基于角色的访问。 PHPGACL 也可以,但我不能肯定地告诉你。
不过,我可以告诉您的是,Zend 框架的Zend_ACL 组件将执行基于角色的设置(但是您必须进行子类化才能同时检查多个角色)。当然,这样做的痛苦是您必须从整体下载(或 SVN 结帐)中提取 Zend_ACL,我不相信它有任何外部依赖项。
Zend_ACL 的优点在于它与存储无关。您可以每次都重新构建它,也可以将其设计为序列化(我将两者结合使用,为缓存序列化并从数据库重新构建)。
【讨论】:
罗伯特:这个答案太老了,即使链接仍然有效,最好不要听从它的建议【参考方案3】:我创建了一个名为PHP-Bouncer 的开源项目,您可能会对它感兴趣。它还很年轻,但运行良好且易于配置。我最终开发了它,因为现有的解决方案似乎都不能满足我的需求。我希望这会有所帮助!
【讨论】:
您的项目满足了哪些需求?否则这只是一个广告。 由于 OP 要求“开源、基于 PHP、基于角色的访问控制系统”,而 PHP-Bouncer 是一个开源、基于 PHP、基于角色的访问控制系统,我想通了会很合适。 PHP-Bouncer 不久前已移至 Github,我已更新链接。感谢您引起我的注意!【参考方案4】:phpgaclhttp://phpgacl.sourceforge.net/是一个通用的基于acl的访问控制框架
虽然我不知道任何 CI 特定实现,但我知道您只需要主类文件即可使 phpgacl 工作。所以我相信与 CI 的集成不会有任何问题。 (我与 CI 合作过)
【讨论】:
【参考方案5】:这是我发现的两个 PHP RBAC 库:
https://github.com/leighmacdonald/php_rbac https://github.com/brandonlamb/php-rbac其实我用的是PolyAuth中的第一个:https://github.com/Polycademy/PolyAuth/
这是一个功能齐全的身份验证库,包括 NIST 1 级 RBAC。是的,RBAC 与 ACL 不同。我也使用 Codeigniter,您所要做的就是使用 PDO 驱动程序并传入连接 ID。请参阅本教程了解如何执行此操作:http://codebyjeff.com/blog/2013/03/codeigniter-with-pdo
【讨论】:
【参考方案6】:了解 Khaos ACL 这是一个 CI 库...我也在检查 phpgacl 以及如何将它用于 CI...尚未检查 Zend ACL。但也许它可以“移植”到 CI
【讨论】:
【参考方案7】:试试 CodeIgniter 的 DX_Auth 插件。我正在研究 DX_Auth 具有的类似(而不是超集)功能。我的 CI 插件集包括菜单显示(可以通过 CSS 控制)、在调用控制器之前基于角色的访问控制和其他功能。我希望尽快发布它。当我这样做时会给出项目网址
【讨论】:
【参考方案8】:RBAC != ACL - Roland 有这个问题的唯一正确答案。
顺便说一句,当然它是实现任何类型权限系统的框架的重要组成部分 - 至少使用框架没有意义,如果它没有为您提供精心设计的 RBAC 系统 - 使用它可能会更好一个带有任何 ORM 层的简单模板系统。
这是 php 世界中常见的反模式,像 Ruby 或 Django 这样的框架被“克隆”只是作为这些现代框架提供的一个子集 - 作为一个典型的综合症,你会看到缺乏良好的 ACL 或 RBAC 集成到这些框架中框架 - 本质上是一个笑话。 目前只有 Yii PHP 框架带有一个不错的 RBAC 实现。
【讨论】:
【参考方案9】:我知道这条路很冷,但是突然出现了一个新项目:
PHP-RBAC 是 PHP Hierarchical NIST Level 2 标准基于角色的访问控制,非常成熟。它也是一个 OWASP 项目。
希望你喜欢http://phprbac.net
【讨论】:
您在其他问题中发布了完全相同的答案。您是开发人员吗? 我是开发人员之一。【参考方案10】:http://www.jframework.info(死链接)
jFramework 有一个标准的 NIST 2 级 RBAC,其增强功能据说是最快的(包括基准测试)它可以在单个 SQLite 数据库文件上运行,并且经过全面测试,就像手套一样工作。
依赖于 jFramework DBAL,但您可以简单地将代码中的 DBAL SQL 查询替换为您想要的 DBAL,当然您也可以以 SOP 方式使用 jFramework。
【讨论】:
【参考方案11】:Ion Auth Library 使用用户和组 - https://github.com/benedmunds/CodeIgniter-Ion-Auth 但是没有可用的 RBAC 系统来使用和管理它们。但是你可以把你的函数变白。
【讨论】:
以上是关于基于角色的访问控制的主要内容,如果未能解决你的问题,请参考以下文章