zoukankan      html  css  js  c++  java
  • CodeIgniter通过hook的方式实现简单的权限控制

    根据自己的实际情况,需要两个文件,一个是权限控制类,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();

    原文地址:http://blog.csdn.net/treesky/article/details/6587465

  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/hongfei/p/2752280.html
Copyright © 2011-2022 走看看