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这个文件,代码如下:
- /*
- |--------------------------------------------------------------------------
- | 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(emptyempty($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();
以上只是实现了简单的权限控制,小伙伴们可以根据自己的需求,自由扩展下吧。
Tags: CI框架 hook 权限控制
相关文章
- ·CI(CodeIgniter)框架中的增删改查操作(2021-02-11)
- ·CI框架中libraries,helpers,hooks文件夹详细说明(2021-02-11)
- ·CI框架中zip类应用示例(2021-02-21)
- ·CI框架自动加载session出现报错的解决办法(2021-02-21)
- ·CI框架在CLI下执行占用内存过大问题的解决方法(2021-02-21)
- ·如何让CI框架支持service层(2021-04-19)
- ·CI框架安全类Security.php源码分析(2021-04-23)
- ·CI框架装载器Loader.php源码分析(2021-04-23)
- ·CI框架验证码CAPTCHA辅助函数用法实例(2021-04-24)
- ·CI框架入门示例之数据库取数据完整实现方法(2021-04-24)
- ·CI框架中cookie的操作方法分析(2021-05-03)
- ·CI框架中redis缓存相关操作文件示例代码(2021-08-06)
- ·CI框架中数据库操作函数$this->db->where()相关用法总结(2021-08-06)
- ·CI框架集成Smarty的方法分析(2021-08-06)
- ·CI框架(CodeIgniter)操作redis的方法详解(2021-08-31)
- ·CI框架安全过滤函数示例(2021-10-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)