**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

时间: 2024-10-06 00:34:44

**CodeIgniter通过hook的方式实现简单的权限控制的相关文章

简单的权限控制

手上的项目涉及到权限控制,但是权限,角色,资源访问都很简单,所以就没有写特么复杂,所以将每个用户的角色直接存储到了该用户的详细信息中.所以每个用户在登录系统时,在页面加载时判断该用户中角色属性值 具体代码如下 <% Yyry yyry = (Yyry)session.getAttribute("yyry"); int yyryids=0; String juese =""; boolean flag= false; if(yyry==null){ respon

asp.net mvc 简单实现权限控制

public class HttpAuthorizeAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { bool _pass = false; if (httpContext.Session["UserName"] != null) { _pass = true; } return _pass; } /// <summary>

shiro进行权限控制的四种方式

```我们使用shiro进行权限控制 有以下几种方式 1. URL拦截权限控制:基于filter过滤器实现 我们在spring配置文件中配置shiroFilter时配置 <!--指定URL级别拦截策略 --> <property name="filterChainDefinitions"> <value> /css/ = anon /js/ = anon /images/ = anon /validatecode.jsp = anon /login.

Hook框架xposed的简单demo

简介:Xposed框架是一款可以在不修改APK的情况下影响程序运行的框架服务,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的虚拟机的劫持. Github地址:https://github.com/rovo89/Xposed 首先我们Hook无参数的函数 1.建立一个空工程,编写获取序列号的简单例子 1) 获取手机状态需要设置权限 <use

WEB开发中一些常见的攻击方式及简单的防御方法

WEB开发中一些常见的攻击方式及简单的防御方法 20151127 转载http://www.lvtao.net/dev/582.html SQL注入最常见的攻击方式,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 跨站脚本攻击(XSS)跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取

简单的权限设计

原来做OA的时候一直不知道权限怎么写. 受到原来粗粒度权限控制的观念影响,所以将问题复杂化了让我不知道怎么下笔. 原先的粗粒度控制权限: 书写一个过滤器,过滤器的映射范围即权限控制的范围. 游客只能访问公共的部分jsp或者controller. 我的例子的权限分为3个地方: 游客.用户.管理员. 所以写一个或者两个过滤器.在访问指定内容前进行session或者application中的身份信息验证,然后通过与否. 过滤器控制多个jsp主要是通过jsp的命名规范和文件夹规范,利用通配符*实现.控制

学习笔记(九)Filter 完成一个简单的权限模型 HttpServletWrapper 和 HttpServletResponseWrapper

2. HttpServletWrapper 和 HttpServletResponseWrapper 1). Servlet API 中提供了一个 HttpServletRequestWrapper 类来包装原始的 request 对象,HttpServletRequestWrapper 类实现了 HttpServletRequest 接口中的所有方法, 这些方法的内部实现都是仅仅调用了一下所包装的的 request 对象的对应方法 //包装类实现 ServletRequest 接口. publ

简单的RBAC用户角色权限控制

Java web项目中,无论项目是大是小,或多或少都会涉及到用户访问权限的控制,权限管理总体的设计思路就是,不该看的不看,不该做的不做!据我目前的了解,我所知道的几种实现访问权限控制的方式有: JQuery的zTree设计权限树: 权限框架shiro: 基于角色的访问控制RBAC: 这是我所知道的几种权限管理,如果有误或是还有其他的方法,望指正! 而今天我要说的就是基于角色的访问控制RBAC的权限管理,基于角色的访问控制(Role-Based Access Control),在RBAC中,权限与

项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 7. 基于treegrid实现菜单展示 2 常见的权限控制方式 2.1 url拦截实现权限控制 shiro基于过滤器实现的   2.2 注解方式实现权限控制 底层:代理技术     3 基于shiro的url拦截方式验权   <!-- 配置过滤器工厂 --> <bean id="