

CodeIgniter用钩子实现基于URL的权限控制
source link: http://abcdxyzk.github.io/blog/2012/04/03/tools-ci-access/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

CodeIgniter用钩子实现基于URL的权限控制
2012-04-03 21:08:00
基于URL权限系统:
例如游客只能访问音乐模块的index,list,search方法。而注册用户除上述功能之外还能访问create,update,delete方法。那么我们可以在控制器之行之前判断当前用户是否具备访问该控制器的权限。
直接上代码:
1.system/application/config/hooks.php中添加钩子声明:
$hook['post_controller_constructor'] = array(
'class' => 'Acl',
'function' => 'filter',
'filename' => 'acl.php',
'filepath' => 'hooks',
);
2.system/application/config/config.php中让钩子系统生效
$config['enable_hooks'] = TRUE;
3.然后在config中新建acl.php权限系统配置文件,当然你也可以放在数据库中。
//游客权限映射
$config['acl']['visitor'] = array(
'' => array('index'),//首页
'music' => array('index', 'list'),
'user' => array('index', 'login', 'register')
);
//管理员
$config['acl']['admin'] = array(
);
//————-配置权限不够的提示信息及跳转url——————//
$config['acl_info']['visitor'] = array(
'info' => '需要登录以继续',
'return_url' => 'user/login'
);
$config['acl_info']['more_role'] = array(
'info' => '需要更高权限以继续',
'return_url' => 'user/up'
);
/* End of file acl.php */
/* Location: ./application/config/acl.php */
4.system/application/hooks目录下添加acl.php逻辑处理文件
class Acl
{
private $url_model;//所访问的模块,如:music
private $url_method;//所访问的方法,如:create
private $url_param;//url所带参数 可能是 1 也可能是 id=1&name=test
private $CI;
function Acl()
{
$this->CI = & get_instance();
if (!session_id()) session_start();
$url = $_SERVER['PHP_SELF'];
$arr = explode('/', $url);
$arr = array_slice($arr, array_search('index.php', $arr) + 1, count($arr));
$this->url_model = isset($arr[0]) ? $arr[0] : '';
$this->url_method = isset($arr[1]) ? $arr[1] : 'index';
$this->url_param = isset($arr[2]) ? $arr[2] : '';
}
function filter()
{
$user = $this->CI->session->userdata('user');
if (empty($user)) {//游客visitor
$role_name = 'visitor';
} else {
$role_name = $user->role;
}
$this->CI->load->config('acl');
$acl = $this->CI->config->item('acl');
$role = $acl[$role_name];
$acl_info = $this->CI->config->item('acl_info');
if (array_key_exists($this->url_model, $role) && in_array($this->url_method, $role[$this->url_model])) {
;
} else {//无权限,给出提示,跳转url
$_SESSION['info'] = $acl_info[$role_name]['info'];
redirect($acl_info[$role_name]['return_url']);
}
}
}
Posted by kk
Recommend
-
34
嗯,昨天面试让讲我的项目,让我讲讲项目里权限控制那一块的,讲的很烂。所以整理一下。 按照面试官的提问流程来讲: 一、RBAC是个啥东西了? RBAC ( Role-Based Access Control ),即基于...
-
10
CodeIgniter去掉url中的index.php 2012-03-26 18:04:00 RewriteEngine命令需要rewrite mod的支持 $>cd /etc/apache2/mods-enabled 切换到apache下的mods-enabled目录 $&g...
-
17
作者:_Yufan<br> 来源:www.cnblogs.com/yfzhou/p/9813177.html 本文总结自实习中对项目的重构。原先项目采用 Springboot+freemarker 模版,开发过程中觉得前端逻辑写的实在恶心,后端 Controller 层还必须返回 Freemarker 模版的 ModelAndView...
-
9
Vue 自定义指令实现按钮级别的权限控制 兰玉磊 • 2021年5月29日 23:48 • Web • 阅读 540在我们的日常开发过程中,通常...
-
8
Spring Security实现统一登录与权限控制 1 项目介绍 最开始是一个单体应用,所...
-
8
How to delete index.php from a CodeIgniter URL? advertisements I am new to
-
4
动手写ORM框架 - GeeORM第五天 实现钩子(Hooks) 源代码/数据集已上传到 Github - 7days-golang ...
-
12
给git配置钩子实现服务器和客户端代码一致 2017-09-10 16:37:09 code 约 876 字 预计阅读 2...
-
3
PHP的Hook钩子实现 发表于 2017-12-27 | 分类于 开发 | | 浏览 次 | 字数统计: 821 | 阅读时长 ≈ 3钩子就像一个”陷阱”、”监听器”,当A发送一个消息到B时,当消息还未到...
-
7
一. 首先,为什么要用这么复杂的标题? 为什么标题会这么复杂呢?原因很简单。我自己被搞昏了,为了体现我的眩晕程度,所以用了这个复杂的名字。 另外,还有一个最重要的原因:本博内容本来就容易让人昏,并且本...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK