两种方法

  1. 钩子函数
  2. 集成核心Controller

方法一,钩子函数:

一直没找到CI的权限认证扩展,以前好像找到过一个老外的扩展,不过不怎么好用,现在记不清了,后来仿着jsp firter的方式用CI钩子写了一下,感觉还可以,做个小网站,小应用足够了,没必要搞得太复杂。看到很多人在网上问,这里把我们的方法分享一下,如果你有更好的实现,也请记得分享给我们。^_^

通常我们后台路径看起来都会像下面这样:

http://www.php-chongqing.com/index.php/manage/

http://www.php-chongqing.com/index.php/manage/article/add

http://www.php-chongqing.com/index.php/manage/product/delete/1

http://www.php-chongqing.com/index.php/manage/user

因为CI是MVC的,单一入口,并且给我们提供了7个挂钩点,一切就很简单了,我们只需要在CI执行目标控制器方法之前拦截到请求,检查URI是否是以manage开头即可,如果URI以manage开头,就检查用户权限,没有权限就跳转到登陆页或是相关的提示页。

1、先到config/config.php中设置允许使用钩子

$config['enable_hooks'] = TRUE;
2、再到config/hooks.php中配置权限认证钩子

$hook['post_controller_constructor'] = array(    'class'    => 'ManageAuth',    'function' => 'auth',    'filename' => 'ManageAuth.php',    'filepath' => 'hooks');
需要注意的是一定要使用'post_controller_constructor'挂钩点,因为我们可能要在ManageAuth中使用CI的aip,连接数据库等。

3、创建ManageAuth.php文件,放到hooks目录下,ManageAuth.php中的代码如下:

/** * * 后台权限拦截钩子 * @link http://www.php-chongqing.com * @author bing.peng *  */class ManageAuth {    private $CI;            public function __construct() {        $this->CI = &get_instance();     }            /**     * 权限认证     */    public function auth() {        $this->CI->load->helper('url');        if ( preg_match("/manage.*/i", uri_string()) ) {        // 需要进行权限检查的URL            $this->CI->load->library('session');            if( !$this->CI->session->userdata('username') ) {        // 用户未登陆                redirect('login');                return;            }        }            }        }

OK,就这样,搞定了,我们通过正则表达匹配,凡是以manage打头的url都是需要登陆后才能访问的。

示例中的权限认证很简单,仅仅只是检查下session是否存有username,如果有就认为用户已登陆,可以访问资源,否则就跳转到登陆页面。注意登陆的url千万不是能以manage开头,否则就重向定死循环了。

如果,你须更复杂的权限认证直接写你自己的认证方法就OK了,比如你使用了用户、角色、资源等等。

这种实现基本可以算作AOP(面向切面编程)了,其实PHP已经有了AOP的雏形,改天用原生PHP的方法拦截,实现一下权限认证。^_^

参考官方文档:http://codeigniter.org.cn/user_guide/general/hooks.html

方法二,集成核心Controller:

<?php
class Extend_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
}
}

查看官方文档:http://codeigniter.org.cn/user_guide/general/core_classes.html

Codeigniter-实现权限认证的更多相关文章

  1. **[权限控制] 利用CI钩子实现权限认证

    http://codeigniter.org.cn/forums/thread-10877-1-1.html 一直没找到CI的权限认证扩展,以前好像找到过一个老外的扩展,不过不怎么好用,现在记不清了, ...

  2. 3.jenkins 权限认证与密码设置

    1.前言 在用Jenkins过程中忘记管理员密码和开启权限认证后管理员帐号没有任何权限是经常遇到的情况,最近有好多群友被这个问题困扰.但Jenkins没有提供密码找回的功能,经过一翻探索找到了一种变相 ...

  3. 【Java EE 学习 20】【使用过滤器实现登陆验证、权限认证】【观察者模式和监听器(使用监听器实现统计在线IP、登录IP 、踢人功能)】

    一.使用过滤器实现登录验证.权限认证 1.创建5张表 /*使用过滤器实现权限过滤功能*/ /**创建数据库*/ DROP DATABASE day20; CREATE DATABASE day20; ...

  4. 比RBAC更好的权限认证方式(Auth类认证)

    Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比RBAC更方便 . RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了, ...

  5. mongodb3 权限认证问题总结

    mongodb3 权限认证问题总结 标签(空格分隔): mongodb 权限 数据库 认证 ubuntu用户安装最新版本mongodb 添加key sudo apt-key adv --keyserv ...

  6. asp.net权限认证篇外:集成域账号登录

    在之前的我们已经讲过asp.net权限认证:Windows认证,现在我们来讲讲域账号登录, 这不是同一件事哦,windows认证更多的是对资源访问的一种权限管控,而域账号登录更多的是针对用户登录的认证 ...

  7. asp.net权限认证:Windows认证

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  8. asp.net权限认证:Forms认证

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  9. asp.net权限认证:HTTP基本认证(http basic)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

随机推荐

  1. 为ssh增加选项

    在使用ssh的时候,可以看到ssh有很多功能,什么-o , -e等等.如下图 需求,想要给ssh增加一个参数的功能.比如说我现在的需求就是执行ssh的时候可以增加一个选项,给我每次ssh的操作搭一个标 ...

  2. 显示hello

    The modern user interface is constructed from visual objects of various sorts. Depending on the oper ...

  3. Gift Hunting(分组背包)

    Gift Hunting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. Java编程杂记

    13 Java Date 日期的使用方法 注意: 月份的设定要-1.0-代表1月:1代表2月,11代表12月. Calendar cal = new GregorianCalendar(2013,00 ...

  5. PHPCMS V9网站更换域名的方法

    网站在发展的过程中,很可能多次的修改域名.那么在phpcms v9中我们要怎么进行设置呢? 请进行以下步骤的修改: 1.修改/caches/configs/system.php里面所有和域名有关的,把 ...

  6. IBM BigInsights 3.0.0.2 集群环境搭建

    1. 改动hosts文件和永久主机名 由于BigInsights 3.0版本号不像之前的版本号能够直接用IP来添加节点,因此我们须要更改每台server的hosts文件和主机名: vim/etc/ho ...

  7. Linux操作系统的文件链接

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++标题:Linux操作系统的文件链接内容:文件链接时间:2019年 ...

  8. 【CSS】定义元素的对齐方式

    1.文本内容居中对齐:text-align.扩展用法:父元素嵌套子元素时,且子元素的宽度小于父元素宽度,使用text-align:center,可以实现子元素的居中对齐. <!DOCTYPE h ...

  9. 2018-2019-2 20165330《网络对抗技术》Exp6 信息搜集与漏洞扫描

    目录 基础问题 相关知识 实验目的 实验内容 实验步骤 实验总结与体会 实验目的 掌握信息搜集的最基础技能与常用工具的使用方法. 返回目录 实验内容 各种搜索技巧的应用 使用搜索引擎 搜索网址目录结构 ...

  10. HUD 1288 Hat&#39;s Tea(反向的贪心,非常好的一道题)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1288 Hat's Tea Time Limit: 2000/1000 MS (Java/Others)  ...