基于角色的访问控制
是否有可用于CodeIgniter
的开源,基于PHP的,基于角色的访问控制系统?
解决方案
phpgacl http://phpgacl.sourceforge.net/是基于acl的通用访问控制框架
虽然我不知道任何特定于CI的实现,但我知道我们只需要主类文件即可使phpgacl工作。因此,我相信与CI的集成不会有任何问题。 (我一直与CI合作)
布兰登·萨维奇(Brandon Savage)在他的PHP软件包" ApplicationACL"上做了一个演示,该演示可能会或者可能不会完成基于角色的访问。 PHPGACL可能也能正常工作,但是我不能肯定地告诉我们。
但是,我可以告诉是Zend Framework的Zend_ACL组件将执行基于角色的设置(但是我们必须子类化才能一次检查多个角色)。理所当然的是,我们必须退出Zend_ACL,我认为它没有任何外部依赖关系,可以从整体下载(或者SVN签出)中获取。
Zend_ACL的优点在于它与存储无关。我们既可以每次重建它,也可以将其设计为序列化的(我将两者结合使用,对缓存序列化并从数据库重建)。
发现了作为CI库的Khaos ACL ...我也在检查phpgacl以及如何将其用于CI ...还没有检查Zend ACL。但也许可以"移植"到CI
也许我误解了这个问题,但是基于角色的访问控制(RBAC)并不是要避免访问控制列表(ACL)的全部目的吗?
RBAC differs from access control lists (ACLs) (...) in that it assigns permissions to specific operations with meaning in the organization, rather than to low level data objects. For example, an access control list could be used to grant or deny write access to a particular system file, but it would not say in what ways that file could be changed. In an RBAC-based system an operation might be to create a 'credit account' transaction in a financial application (...). The assignment of permission to perform a particular operation is meaningful, because the operations are fine grained and themselves have meaning within the application. (Quote: Wikipedia)
我不知道Zend_ACL或者提到的其他实现的细节,但是如果它们是基于ACL的,我不建议将它们用于基于角色的授权。
尝试使用CodeIgniter的DX_Auth插件。我正在研究DX_Auth具有的类似(而不是超集)功能。我的一组CI插件包括菜单显示(可以通过CSS进行控制),在调用控制器之前的基于角色的访问控制以及其他功能。我希望尽快发布。这样做时将提供项目URL
RBAC!= ACL罗兰对此问题只有唯一正确的答案。
顺便说一句,当然,实现任何类型的权限系统都是框架的重要组成部分,至少使用框架没有意义,如果它不能为我们提供良好的RBAC系统,最好使用带有以下内容的简单模板系统更好然后是任何ORM层。
这是php世界中常见的反模式,像" Ruby"或者" Django"这样的框架仅作为这些现代框架提供的子集而被"克隆",因为典型的综合症是我们缺乏对这些框架的良好ACL或者RBAC集成笑话。
目前只有Yii PHP框架附带了不错的RBAC实现。
http://www.jframework.info(无效链接)
jFramework具有标准的NIST 2级RBAC,具有增强功能,据称是最快的可用功能(包括基准测试),它可以在单个SQLite数据库文件上运行并经过全面测试,像手套一样工作。
依赖于jFramework DBAL,但是我们可以使用所需的DBAL轻松替换代码中的DBAL SQL查询,当然我们可以以SOP方式使用jFramework。