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

http://codeigniter.org.cn/forums/thread-10877-1-1.html

一直没找到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的方法拦截,实现一下权限认证。^_^

时间: 2024-11-06 23:39:40

**[权限控制] 利用CI钩子实现权限认证的相关文章

vue实现菜单的权限控制, 利用vuex和addRoute

为了对于不同角色显示不同的菜单 思路1: 本地放一份完整的菜单数据,通过后台返回角色的菜单列表.两者对比,筛选需要显示的菜单数据绑定, 这里有个问题就是路由vue实例初始化就生成了,加载的全部,人为输入地址是可以访问到角色权限以外的数据, 所以还要加路由构子router.beforeEach()去做判断哪些是角色权限以内的路由. 这种思路的比较复杂,逻辑比较多 思路2: Vue Router官方API: 利用router.addRouter()就可以动态添加路由实现 下面详细讲一讲vue.add

Chapter6_访问权限控制_类的访问权限

在Java中,访问权限修饰词也可以用于确定库中的哪些类对于该库的使用者是可用的,类既不可以是private也不可以是protected的,对于类的访问权限,只有两种选择:包访问权限或者public.下面是一个例子: 1 class soup1{ 2 private soup1(){} 3 public static soup1 makesoup(){ 4 return new soup1(); 5 } 6 } 7 8 class soup2{ 9 private soup2(){} 10 pri

权限控制-JS判断是否有权限进行操作跳转页面需要加target

妈蛋的,这问题花了我20分钟,我用来搜索代码花了18分钟,我写代码有个差生的习惯,就是抄,啥东西想做,就上网搜别人杂写,拿下来照抄改一下即可 啧啧,妈蛋的,整个一页,没有我能用到的信息,那些博客内容一毛一样的人,你们难道不动脑子吗,难道是靠凑字数领钱的吗!最恨这种人,你搬可以,但不能不用一下就随便搬.瞅瞅收录的第一页全TM是没用的信息 最后花了2分钟我仔细想了一下,自己搞定了. 方法有很多,也许很low,但确实满足需求了 jsp:  <%        String username =(Str

Java访问权限控制

访问权限控制   java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.protected.包访问权限(没有关键字).private. 包:库单元 包内有一组类,它们在单一名字空间之下被组织在了一起.如果你向导入某个标准库中的类的话,可以使用import关键字.我们之所以要导入,就是要提供一个管理名字空间的机制.所有类成员的名称都是彼此分离的.所以具有相同方法的不同类在程序运行时不会出现错误的.

(转)通过SpringMVC+Annotation实现方法、按钮级别的细粒度权限控制

原文地址:http://blog.csdn.net/ycyk_168/article/details/18456631 随着企业信息化的不断深入,各种各样的信息系统成为提高企业运营及管理效率的必备工具,越来越多的企业核心机密如销售机会.客户资料.设计方案等通过信息系统存储.备案.流转,这些核心资料一旦外泄,势必对企业造成极大损失.科技时代,信息是企业生存的命脉,信息的安全也必然成为企业极度重视的问题.如今,随着各种信息安全措施的实施,信息泄密已经从外部泄漏向内部人员泄漏转移.外部的黑客.病毒要想

036 权限控制介绍 - bos

一.权限概述 1.认证:系统提供的用于识别用户身份的功能,通常登录功能就是认证功能-----让系统知道你是谁?? 2.授权:系统授予用户可以访问哪些功能的许可(证书)----让系统知道你能做什么?? 二.常见的权限控制方式 1.URL拦截权限控制 <1>底层基于拦截器或者过滤器实现 <2>用户访问某一url,在过滤器或拦截器中先判定该url是否需要拦截,若需要,则取出当前登录的用户,判定是否具有足够的权限 2.方法注解权限控制 <1>添加某一注解表示该方法需要进行权限控

了解权限控制框架shiro 之实际应用.

Apache Shiro 1.权限控制分为 a.粗粒度 URL 级别权限控制     b.细粒度方法级别权限控制 2.使用shiro进行权限控制主要有四种主要方式 : a. 在程序中 通过 Subject 编程方式进行权限控制 b. 配置 Filter 实现 URL 级别粗粒度权限控制 c. 配置代理,基于注解实现细粒度权限控制 d. 在页面中使用 shiro 自定义标签实现 页面显示权限控制 3.shiro实际应用之基本配置: a.用父工程引入shiro b.配置web.xml c.配置app

Vue 实现前端权限控制

为什么做前端权限控制 前端权限控制并不是新生事物,早在后端 MVC 时代,web 系统中就已经普遍存在对按钮和菜单的显示 / 隐藏控制,只不过当时它们是由后端程序员在 jsp 或者 php 模板中实现的. 随着前后端分离架构的流行,前后端以接口为界实现开发解耦,权限控制也一分为二,前端权限控制的所有权才真正回到了前端. 可能有的同学会想,前后端分别做一套控制,是不是将事情复杂化了,而且从根本上讲前端没有秘密,后端才是权限的关键,那是不是只在后端做控制就可以了. 对于这个问题我们首先应该明确,前后

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

我在上一篇随笔<基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍>中大概介绍了基于MVC的Web开发框架的权限控制总体思路.其中的权限控制就是分为"用户登录身份验证"."控制器方法权限控制"."界面元素权限控制"三种控制方式,可以为Web开发框架本身提供了很好用户访问控制和权限控制,使得用户界面呈现菜单.Web界面的按钮和内容.Action的提交控制,均能在总体权限功能分配和控制之下. 本篇文章主要细化这三个方面