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

简介: http://codeigniter.org.cn/forums/thread-10877-1-1.html 一直没找到CI的权限认证扩展,以前好像找到过一个老外的扩展,不过不怎么好用,现在记不清了,后来仿着jsp firter的方式用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的方法拦截,实现一下权限认证。^_^
如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
1月前
|
存储 JSON 安全
GraphQL 中的权限与认证:一分钟浅谈
本文介绍了GraphQL中权限与认证的基础概念、实现方法及常见问题。通过JWT认证和基于角色的授权示例,详细展示了如何在GraphQL中实现安全的API访问控制,同时指出了一些常见的易错点及其避免方法。
32 5
|
2月前
|
存储 安全 关系型数据库
权限组件是怎么设计的
【10月更文挑战第26天】在实际设计过程中,还需要根据具体的业务需求和技术架构进行灵活调整和优化。
|
6月前
|
安全 Java 关系型数据库
实现权限控制的方法
实现权限控制的方法
|
8月前
|
安全 算法 数据安全/隐私保护
【工程构建】权限认证机制
【1月更文挑战第13天】【工程构建】权限认证机制
|
8月前
|
JSON 算法 数据安全/隐私保护
【工程构建】权限认证 JWT
【1月更文挑战第13天】【工程构建】权限认证 JWT
|
Kubernetes Cloud Native 数据安全/隐私保护
k8s 认证和权限控制
k8s 认证和权限控制
115 1
|
前端开发 数据库 数据安全/隐私保护
DRF--认证和权限
DRF--认证和权限
|
API 数据安全/隐私保护
Yii2.0框架中如何进行身份验证和授权操作?支持哪些认证方式和授权方式?
Yii2.0框架中如何进行身份验证和授权操作?支持哪些认证方式和授权方式?
218 0
|
数据库 数据安全/隐私保护 Python
【Django学习笔记 - 19】:认证、自定义认证、权限、限流
【Django学习笔记 - 19】:认证、自定义认证、权限、限流
295 0
【Django学习笔记 - 19】:认证、自定义认证、权限、限流
|
SQL 存储 NoSQL
Gin集成Casbin进行访问权限控制
Gin集成Casbin进行访问权限控制
Gin集成Casbin进行访问权限控制