CI框架中通过hook的方式实现简单的权限控制


Posted in PHP onJanuary 07, 2015

根据自己的实际情况,需要两个文件,一个是权限控制类,Acl,另外一个是权限配置的文件acl.php放在了config这个目录下。

Acl这个类放在了application/hook/acl.php。通过application/config/config.php文件开启hook,并且配置config这个目录下的hook.php文件。

1、开启hook功能,config.php这个文件

/*

|--------------------------------------------------------------------------

| Enable/Disable System Hooks

|--------------------------------------------------------------------------

|

| If you would like to use the 'hooks' feature you must enable it by

| setting this variable to TRUE (boolean).  See the user guide for details.

|

*/

$config['enable_hooks'] = TRUE;

2、配置hook.php这个文件

/*

| -------------------------------------------------------------------------

| Hooks

| -------------------------------------------------------------------------

| This file lets you define "hooks" to extend CI without hacking the core

| files.  Please see the user guide for info:

|

|    http://codeigniter.com/user_guide/general/hooks.html

|

*/

$hook['post_controller_constructor'] = array(

    'class'    => 'Acl',

    'function' => 'auth',

    'filename' => 'acl.php',

    'filepath' => 'hooks'

);

具体的参数说明可以参看文档的链接地址,这里尤其要注意post_controller_constructor这个值,可以根据情况选择不同的。

3、编写权限配置文件acl.php放在config目录下。

$config['AUTH'] = array(

    SUPER_ADMIN         => array(

        'admin' => array('index', 'logout'),

    ),

    ADMIN   => array(

        'admin' => array('index', 'logout'),

    ),

    GUEST => array(

        'admin' => array('index', 'logout'),

    ),

);

这里只是我根据自己的情况定义的,不是真实数据,根据自己的情况定。还有主要变量名字要交$config,这样便于加载使用。

4、编写具体的权限控制Acl类

class Acl {

    private $url_model;

    private $url_method;

    private $CI;

    function Acl()

    {

        $this->CI =& get_instance();

        $this->CI->load->library('session');

        $this->url_model = $this->CI->uri->segment(1);

        $this->url_method = $this->CI->uri->segment(2);

    }

    function auth()

    {

        $user = $this->CI->session->userdata('USER');

        if(empty($user))

            $user->status = 0;

        $this->CI->load->config('acl');

        $AUTH = $this->CI->config->item('AUTH');

        if(in_array($user->status, array_keys($AUTH))){

            $controllers = $AUTH[$user->status];

            if(in_array($this->url_model, array_keys($controllers))){

                if(!in_array($this->url_method, $controllers[$this->url_model])){

                    show_error('您无权访问该功能,该错误已经被记录!点击<a href="'. site_url('admin/logout') .'">返回</a>');

                }

            }else{

                show_error('您无权访问该模块,该错误已经被记录!点击<a href="'. site_url('admin/logout') .'">返回</a>');

            }

        }

        else

            show_error('错误的用户类型,该错误已经被记录!点击<a href="'. site_url('admin/logout') .'">返回</a>');

    }

}

整体上大体是这样的形式,最后还是要根据自己的实际情况来确定。

需要注意的是:

$this->CI =& get_instance();

以上只是实现了简单的权限控制,小伙伴们可以根据自己的需求,自由扩展下吧。

PHP 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php 分页函数multi() discuz
Jun 21 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
php简单获取文件扩展名的方法
Mar 24 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
php mysqli查询语句返回值类型实例分析
Jun 29 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
CI框架中site_url()和base_url()的区别
Jan 07 #PHP
给ECShop添加最新评论
Jan 07 #PHP
php程序总是提示验证码输入有误解决方案
Jan 07 #PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 #PHP
php中的动态调用实例分析
Jan 07 #PHP
Zend Guard使用指南及问题处理
Jan 07 #PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 #PHP
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
一个程序下载的管理程序(二)
2006/10/09 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
python打包成so文件过程解析
2019/09/28 Python
详解python中*号的用法
2019/10/21 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
运动会加油稿100字
2014/09/19 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
离婚代理词范文
2015/05/23 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
PHP中多字节字符串操作实例详解
2021/08/23 PHP
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技
HttpClient实现表单提交上传文件
2022/08/14 Java/Android