pranaya / cakephp-zone-acl
一个基于应用区域的 CakePHP Acl 插件,旨在提高灵活性和简洁性
Requires
- php: >=5.3
- composer/installers: *
This package is not auto-updated.
Last update: 2024-09-28 17:54:27 UTC
README
CakePHP ZoneAcl 插件以独特的方式处理 CakePHP 应用程序中的权限。ZoneAcl 允许您将应用程序控制器/操作分为组,称为区域。在定义了任意区域后,您可以决定哪些用户或组可以根据您喜欢的任何标准访问哪些区域。它为您的应用程序 acl 提供了简单性和灵活性。
需求
- CakePHP 2.x
安装
方法 1
- 下载此文件:http://github.com/pranaya/cakephp-zone-acl/zipball/master
- 将内容解压缩到 app/Plugin/ZoneAcl
方法 2
使用 composer
将以下内容添加到您的 composer.json 文件中
"require": { "pranaya/cakephp-zone-acl": "[VERSION].*" }
然后运行 composer install 或 composer update 命令
加载插件
在 app/bootstrap.php
CakePlugin::load('ZoneAcl', array('bootstrap' => true));
用法
配置
在 app/Config/core.php
修改
Configure::write('Acl.classname', 'DbAcl'); Configure::write('Acl.database', 'default');
为
Configure::write('Acl.classname', 'ZoneAcl.ZoneAcl'); //Configure::write('Acl.database', 'default');
然后将 app/Plugin/ZoneAcl/Config/zone-acl.ini 文件复制到 app/Config/zone-acl.ini
如果您想使用 ZoneAcl.ZoneAclHtml 辅助函数。
在 app/Controller/AppController.php
<?php class AppController extends Controller { public $helpers = array('ZoneAcl.ZoneAclHtml'); }
设置区域
区域在 ini 文件中定义。定义区域并向其中添加 URL(控制器/操作)非常简单。
区域用 "[zone:zonename]" 表示。只要它们的名称不匹配,您可以添加任意多的区域。请使用数组键友好的区域名称。
一个 URL 可以属于多个区域,如果您愿意的话。区域中的 URL 可以用正则表达式(推荐)或简单地使用整个控制器/操作组合来定义。
URL 格式
- 控制器/操作
- 插件/控制器/操作
您必须使用实际的控制器和操作名称,即使用 UserProfiles 而不是 user_profiles 表示 UserProfilesController,并使用 view_detail 表示 view_detail 操作。默认情况下,URL 是大小写敏感的,可以通过将“case-sensitive”设置更改为“false”来关闭此设置。请参考 zone-acl.ini 文件以获取更多有用的 URL 示例。
示例:app/Config/zone-acl.ini
[settings] case-sensitive = true [zone:admin] ; allow all admin_ actions url[] = '(\w)+/admin_*' ; allow all plugin's admin_ action url[] = '(\w+)/(\w+)/admin_*' ; allow UserProfile controller's view_detail action, just an example url[] = 'UserProfile/view_detail' [zone:general-user] ; allow all actions except admin_ actions url[] = '(\w+)/(?!admin_)*' ; allow all plugin actions except admin_ actions url[] = '(\w+)/(\w+)/(?!admin_)*'
设置 Aro
设置 Aro 非常简单。基本上,它是通过会话数据识别用户并确定他们可以访问哪些区域。这部分完全取决于您的应用程序需求。它可以像需要的那样简单或复杂。Aro 可以是任何实现 ZoneAroInterface 的对象。
示例
<?php App::uses('ZoneAroInterface', 'ZoneAcl.Controller/Component/Acl'); class MySimpleAro implements ZoneAroInterface { public function getAllowedZones($aro) { // $aro contains user's session data $userId = $aro['User']['id']; $groupId = $aro['User']['group_id']; // find what zones user can access with those info // you can even store the what zones the // user can access in the session itself $zones = array(); $zones[] = 'admin'; $zones[] = 'general-user'; // return array of zone names //the user can access return $zones; } }
一旦您的 Aro 准备好,在 AppController::beforeFilter() 中将其连接到 ZoneAcl。
示例
<?php App::uses('MySimpleAro', 'Path/To/Class'); class AppController extends Controller { public function beforeFilter() { // plug ARO object ZoneAcl::setAro(new MySimpleAro()); } }
ZoneAclHtml 辅助函数
ZoneAclHtml 辅助函数提供了一种方便的方式来隐藏不允许的链接。它扩展了 HtmlHelper。它提供了两种方法。
任何视图文件
<?php // returns true if the current user is // allowed on that url $this->ZoneAclHtml->isAllowed($url); // same as HtmlHelper::link() except it returns empty link // when user is not allowed $this->ZoneAclHtml->link($title, $url);
提示
- 经常使用正则表达式以优化性能并减少 ini 文件中的 URL 数量
- 将流量高的 URL 放在列表顶部,以便更快地匹配
- 将控制器的长操作列表分开成几个 URL,以便更容易阅读您的设置
许可证
MIT 许可证 (MIT)
版权所有 (c) 2015 Pranaya
特此授予任何获得此软件和相关文档副本(“软件”)的人,免费使用该软件不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许提供软件的人这样做,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他方式,无论该索赔、损害或其他责任是否与软件或软件的使用或其他方式有关。