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脚本的10个技巧(4)
Oct 09 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
PHP实现权限管理功能示例
Sep 22 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
多广告投放代码 推荐
2006/11/13 Javascript
javascript下查找父节点的简单方法
2007/08/13 Javascript
javascript动画效果类封装代码
2007/08/28 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
python映射列表实例分析
2015/01/26 Python
python简单读取大文件的方法
2016/07/01 Python
详解python中的文件与目录操作
2017/07/11 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
python使用turtle绘制分形树
2018/06/22 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
python django model联合主键的例子
2019/08/06 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
投资意向书范本
2014/04/01 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
班主任寄语2015
2015/02/26 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python