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表单提交问题的解决方法
Apr 12 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
PHP句法规则详解 入门学习
Nov 09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
Smarty环境配置与使用入门教程
May 11 PHP
Yii CGridView用法实例详解
Jul 12 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 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
检测png图片是否完整的php代码
2010/09/06 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
python字典基本操作实例分析
2015/07/11 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
金士达面试非笔试
2012/03/14 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
办公室人员先进事迹
2014/01/27 职场文书
十八大报告观后感
2014/01/28 职场文书
创先争优活动方案
2014/02/12 职场文书
城管综合整治方案
2014/05/01 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
会计人员岗位职责
2015/02/03 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
培训心得体会怎么写
2016/01/25 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers