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 相关文章推荐
用PHP和ACCESS写聊天室(九)
Oct 09 PHP
PHP 采集心得技巧
May 15 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
php代码审计比较有意思的例子
May 07 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 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
APMServ使用说明
2006/10/23 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
python遍历数组的方法小结
2015/04/30 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
劳动之星获奖感言
2014/02/01 职场文书
求职自我推荐信
2015/03/24 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
开工典礼致辞
2015/07/29 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL