CakePHP的ACL组件究竟有多强大?

时间:2012-03-28 17:04:01

标签: cakephp cakephp-2.0 acl

我已经在这里和各种网站上多次阅读过ACL组件是一个非常强大的工具。然而,下一句通常以一个版本开头“然而,蛋糕手册很难记录下来,所以这就是我使用的系统。”我是一个编程新手,因为文档也一直在努力学习Cake;我不知道究竟是什么让AclComponent如此强大,因为每个人都推荐它,但许多人还在使用别的东西。任何人都可以提出具体的示例或教程,以帮助我更好地理解这个组件吗?例如,它可以帮助我避免编写什么类型的代码,如何限制每个用户而不是整个组的访问权限等?

2 个答案:

答案 0 :(得分:2)

Cake的ACL系统非常强大,因为它非常灵活,可以对访问您的应用程序进行非常精细的控制。大多数人以基本的方式使用它,即,该用户/组可以访问该控制器方法。虽然这是常见用例,但您也可以使用它来限制模型访问其他模型的create操作。

例如,要将Admin组限制为仅为PrivateModel模型创建记录:

// add aco
$this->Acl->Aco->add(array(
'alias' => 'PrivateModel'
'model' => 'PrivateModel',
'foreign_key' => null
));

// add aro
$this->Acl->Aro->array(array(
'alias' => 'Admin'
'model' => 'Group',
'foreign_key' => 1
));

// allow Admin to read PrivateModel #1
$this->Acl->allow('Admin', 'PrivateModel1', 'create');

// check permission
$allowed = $this->Acl->check('Admin', 'PrivateModel', 'read'); // true
$allowed = $this->Acl->check('Admin', 'PrivateModel', 'create'); // false

"的默认答案;我应该使用ACL"通常"不"仅仅因为它可能需要一些时间来设置和理解。当我最初不了解ACL概念或MPTT树时,Cake的ACL示例足以让我继续使用它。

目前我有一个将组作为ARO的应用程序,并且ACLComponent使用控制器检查isAuthorized()方法,该方法从登录用户中提取该组并使用它来检查该操作是否已获得授权。同样,这可能是ACL的最基本方法。

答案 1 :(得分:1)

正如您在问题中已经指出的那样“但是......蛋糕文档”,我完全赞同。

我看到很多团队成员过去都在努力抓住整个Acl,Aro和Aco的概念,而蛋糕的文档可能会增加它的复杂性而不是解决它。

ACL的真正魔力始于 Aro Aco

ARO (Access Request Object) - They are the entities who request for services. 
for eg. Users, Roles (Admin, Manager, Moderator)

ACO (Access Control Object) - They are the entities which are requested. 
for eg. Posts, Posts->add, Posts->view, Posts->edit

我们可以使用requester行为配置我们的模型,以便每次创建新记录时,它都会自动与相应的Aro同步。

正如jeremyharris已经证明的那样,您可以使用Aro和Aco映射与相应的特权来限制/控制应用程序的访问控制。

此外,使用插件Alaxos ACL可以让您的生活变得非常轻松这个插件真正简化了整个ACL设置,尤其是从UI角度来看

cake控制台还提供了一个shell来初始化db for ACL setup

cake acl initdb    // cakephp 1.1, from shell with create db setup for acl
$ cake schema create DbAcl    // cakephp 1.2 and above

Markstory还有一个名为AclExtras的插件,它为你提供了一个shell,使acl管理更容易,比如创建aco节点,测试和恢复aco,aro树。这是一个了不起的插件。