在CI 中实现ACL
最近尝试了一下在CI中实现ACL ,只是说明思想,思维不一定太严谨,供参考(1) system/application/hooks 中新增文件acl.php
<?php
//stone.pei added. acl hook.
function hook_acl()
{
global $RTR;
$controller = $RTR->class;
$method = $RTR->method;
//load acl config files
$config = & load_class('Config');
$config->load('acl',true,true);
$acl_settings = $config->item('acl');
$acl_tables = $acl_settings['acl'];
//get current user leveleg : $_COOKIE['user_role'] = 'admin'
$current_role = (isset($_COOKIE['user_role']))? $_COOKIE['user_role'] : 'guest' ;
if(isset($acl_tables[$controller][$method])){
//begin to check acl
$allow_roles = $acl_tables[$controller][$method];
if(!in_array($current_role,$allow_roles)){
show_error('No Right To Access',500);
}
}
}
?>
(2) 在system/application/config/下添加文件 acl.php 用作配置文件
<?php
/**
* stone.pei added
* used to config acl
*/
//acl table
//format
/*$acl = array(
'controll_1' =>array(
'method_1' => array('super admin','admin','register'), //who can access this method.
'method_2' => array('admin'),
),
'controll_2' =>array(
'method_1' => array('super admin','admin','register'), //who can access this method.
'method_2' => array('admin','guest'), // no definition: no access limit.
),
);*/
$acl = array(
'blog' => array(
'add' => array('admin','register'),
'html_all' => array('admin'),
'remove_all' => array('admin'),
),
);
//set config
$config['acl'] = $acl;
?>
(3) system/application/config/hooks.php中添加
$hook['pre_controller'] = array(
'function' => 'hook_acl',
'filename'=> 'acl.php',
'filepath' => 'hooks',
'params' => array(),
);
说明:此方法方便,低耦合,无需要修改controller 及method.
可以随时启用ACL 或变更ACL. jufengdhj 发表于 2010-1-27 21:51
很好,我也想这样的。谢谢
另外可以把aclconfig存进数据库,这样以后再admin中可以动态的改变授权了。 ...
求助,如何把aclconfig存进数据库
求助,如何把aclconfig存进数据库 加分!最近难得一见的好帖~ 确实是好贴,很不错 很好,我也想这样的。谢谢
另外可以把aclconfig存进数据库,这样以后再admin中可以动态的改变授权了。 多谢分享:lol 这个果然很强大。
传说的AOP 我的问题是,使用$_COOKIE能取到值吗?然后ci好象会加密cookis的内容。这个比较可以成功吗?
有知道的人说一下。
谢谢 BUG,BUG,发现bug。URL中,如果控制器或者Action写成大写可以瞒过验证。比如楼主的Blog/Add就会失效。本人做了一下小小修改。
$controller = strtolower($RTR->class);
$method = strtolower($RTR->method);
并且ACL配置文件中的controller以及action必须写成小写~~
其实就是 统一一下字符大小写~
再有使用者请注意 一个基于zendacl 的收费权限系统 值得参考
开发文档: http://applications.schizzoweb.com/cizacl/user_guide/
演示地址: http://applications.schizzoweb.com/cizacl/index.php/view
用户:admin
密码:admin 小言 发表于 2011-10-1 13:33 static/image/common/back.gif
一个基于zendacl 的收费权限系统 值得参考
开发文档: http://applications.schizzoweb.com/cizacl/user_gui ...
看看去,嘿嘿
页:
[1]
2