基于角色的访问控制

26

有没有适用于 CodeIgniter 的基于 PHP 的开源角色访问控制系统?

11个回答

31
也许我误解了问题,但 Role-Based Access Control (RBAC) 的整个重点不是为了避免使用访问控制列表(ACL)吗?
引用:
RBAC 不同于访问控制列表(ACL),它将权限分配给具有组织中意义的特定操作,而不是低级数据对象。例如,访问控制列表可用于授予或拒绝对特定系统文件的写入访问权限,但它不会说明该文件可以以何种方式更改。在基于 RBAC 的系统中,一个操作可能是在财务应用程序中创建“信用账户”交易。分配执行特定操作的权限是有意义的,因为这些操作是细粒度且本身在应用程序中具有意义。(引自:Wikipedia
我不知道 Zend_ACL 或其他提到的实现的具体情况,但如果它们是基于 ACL 的,我不建议将其用于基于角色的授权。

我也有同样的看法,即对于这个问题接受了错误的答案.. ACL和RBAC有很大的区别,而一个ACL解决方案被接受为RBAC问题的答案.. - Qarib Haider
迂腐:“我不建议将它们用于基于角色的身份验证。” 访问控制!=身份验证。更重要的是ACL!=RBAC ^_^ - Spain Train
@SpainTrain:当然,你是对的——我已经将其更改为“基于角色的授权”。 - Jens Roland

12
Brandon Savage展示了他的PHP包"ApplicationACL",可能实现基于角色的访问控制。PHPGACL也可能可行,但我不能保证。
然而,我可以告诉你的是Zend Framework的Zend_ACL组件可以进行基于角色的设置(但您需要子类化以一次检查多个角色)。尽管这样做有些麻烦,您需要从单块下载(或SVN checkout)中提取Zend_ACL,但我认为它没有任何外部依赖项。
Zend_ACL的好处是其存储不可知。您可以每次重建它,也可以设计为序列化(我同时使用两种方式,用于缓存的序列化和从数据库重建)。

1
罗伯特:这个答案太老了,即使链接仍然有效,最好不要遵循它的建议。 - dcousineau

3

我创建了一个名为 PHP-Bouncer 的开源项目,可能会对您感兴趣。它还比较年轻,但运行良好且易于配置。由于现有的解决方案似乎都不能满足我的需求,所以我最终开发了这个项目。希望这可以帮到您!


你的项目满足了哪些需求?否则这只是一份广告。 - ftrotter
2
由于OP正在寻找一个“基于开源、基于PHP的角色访问控制系统”,而PHP-Bouncer是一个开源、基于PHP的角色访问控制系统,因此我认为它非常适合。 - Brendon Dugan
PHP-Bouncer 在一段时间前已经迁移到 Github,我已经更新了链接。感谢您的关注! - Brendon Dugan

1

1

phpgacl http://phpgacl.sourceforge.net/ 是一个基于通用acl的访问控制框架。

虽然我不知道任何CI特定的实现,但我知道你只需要主类文件就可以让phpgacl工作。所以我相信与CI的集成不会有任何问题。(我曾经与CI合作过)


0

http://www.jframework.info(已失效链接)

jFramework拥有标准的NIST二级RBAC,并进行了增强,据说是最快的(包括基准测试),它可以操作一个单独的SQLite数据库文件,并经过了彻底的测试,工作得非常完美。

它依赖于jFramework DBAL,但您可以简单地将代码中的DBAL SQL查询替换为您想要的DBAL,并且当然可以以SOP方式使用jFramework。


0

我知道这个问题已经有一段时间了,但是一个新的项目出现了:

PHP-RBAC是一个 PHP 分层 NIST Level 2 标准角色基础访问控制,并且非常成熟。它也是一个 OWASP 项目。

我希望您会喜欢它 http://phprbac.net


你在其他问题中发布了完全相同的答案。你是开发者吗? - Luciano
我是其中一位开发者。 - AbiusX

0

RBAC != ACL - Roland 对这个问题有唯一正确的答案。

顺便说一下,实现任何类型的权限系统是框架的重要组成部分 - 至少使用框架没有一个好的工程化 RBAC 系统是没有意义的 - 最好使用带有任何 ORM 层的简单模板系统。

在 PHP 世界中,常见的反模式是像 Ruby 或 Django 这样的框架只被“克隆”为这些现代框架提供的子集 - 典型的综合症是缺乏良好的 ACL 或 RBAC 集成到这些框架中 - 实质上是一个笑话。目前只有 Yii PHP 框架配备了体面的 RBAC 实现。


0

了解了Khaos ACL,这是一个CI库...我也在研究phpgacl以及如何将其用于CI...还没有检查过Zend ACL。但也许它可以被“移植”到CI中。


0
尝试使用CodeIgniter的DX_Auth插件。我正在开发一个类似(或者说更全面)的功能集合,其中包括菜单显示(可以通过CSS进行控制)、在调用控制器之前进行基于角色的访问控制以及其他功能。我希望很快能够发布它。当我这样做时,将提供项目URL。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接