当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-08 09:30:31 浏览: 评论:0 

这篇文章主要介绍了CI框架中通过hook的方式实现简单的权限控制,需要的朋友可以参考下

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

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

1、开启hook功能,config.php这个文件,代码如下:

  1. /* 
  2. |-------------------------------------------------------------------------- 
  3. | Enable/Disable System Hooks 
  4. |-------------------------------------------------------------------------- 
  5. | 
  6. | If you would like to use the 'hooks' feature you must enable it by 
  7. | setting this variable to TRUE (boolean).  See the user guide for details. 
  8. | 
  9. */ 
  10. $config['enable_hooks'] = TRUE; 

2、配置hook.php这个文件,代码如下:

  1. /* 
  2. | ------------------------------------------------------------------------- 
  3. | Hooks 
  4. | ------------------------------------------------------------------------- 
  5. | This file lets you define "hooks" to extend CI without hacking the core 
  6. | files.  Please see the user guide for info: 
  7. | 
  8. |    http://codeigniter.com/user_guide/general/hooks.html 
  9. | 
  10. */ 
  11. $hook['post_controller_constructor'] = array
  12.     'class'    => 'Acl'
  13.     'function' => 'auth'
  14.     'filename' => 'acl.php'
  15.     'filepath' => 'hooks' 
  16. ); 

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

3、编写权限配置文件acl.php放在config目录下,代码如下:

  1. $config['AUTH'] = array
  2.     SUPER_ADMIN         => array
  3.         'admin' => array('index''logout'), 
  4.     ), 
  5.     ADMIN   => array
  6.         'admin' => array('index''logout'), 
  7.     ), 
  8.     GUEST => array
  9.         'admin' => array('index''logout'), 
  10.     ), 
  11. ); 

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

4、编写具体的权限控制Acl类,代码如下:

  1. class Acl { 
  2.     private $url_model
  3.     private $url_method
  4.     private $CI
  5.     function Acl() 
  6.     { 
  7.         $this->CI =& get_instance(); 
  8.         $this->CI->load->library('session'); 
  9.         $this->url_model = $this->CI->uri->segment(1); 
  10.         $this->url_method = $this->CI->uri->segment(2); 
  11.     } 
  12.     function auth() 
  13.     { 
  14.         $user = $this->CI->session->userdata('USER'); 
  15.         if(emptyempty($user)) 
  16.             $user->status = 0; 
  17.         $this->CI->load->config('acl'); 
  18.         $AUTH = $this->CI->config->item('AUTH'); 
  19.         if(in_array($user->status, array_keys($AUTH))){ 
  20.             $controllers = $AUTH[$user->status]; 
  21.             if(in_array($this->url_model, array_keys($controllers))){ 
  22.                 if(!in_array($this->url_method, $controllers[$this->url_model])){ 
  23.                     show_error('您无权访问该功能,该错误已经被记录!点击<a href="'. site_url('admin/logout') .'">返回</a>'); 
  24.                 } 
  25.             }else
  26.                 show_error('您无权访问该模块,该错误已经被记录!点击<a href="'. site_url('admin/logout') .'">返回</a>'); 
  27.             } 
  28.         } 
  29.         else 
  30.             show_error('错误的用户类型,该错误已经被记录!点击<a href="'. site_url('admin/logout') .'">返回</a>'); 
  31.     } 

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

需要注意的是:

$this->CI =& get_instance();

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

Tags: CI框架 hook 权限控制

分享到: