使用Hook检查权限:
1-创建配置文件
config/acl.php
:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$acl = array(
'role_permission' => array(
'role/index' => 'access_show_roles_list',
'role/add' => 'access_add_role',
'role/edit' => 'access_edit_role',
'role/delete' => 'access_delete_role',
'permission/index' => 'access_permission_list',
),
'users' => array(
'user/index' => 'access_show_users_list',
'user/add' => 'access_add_user',
'user/edit' => 'access_edit_user',
'user/delete' => 'access_delete_user',
'user/profil' => 'access_profil_user',
'user/showpasswd' => 'access_show_password',
),
);
$config['acl'] = $acl;
2-创建挂钩
Hooks/Autorization.php
:
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Authorization {
private $ci;
public function __construct(){
$this->ci = &get_instance();
}
public function authorize()
{
if (!$this->_has_access()) {
if ($this->ci->input->is_ajax_request())
die('-9');
show_404();
}
}
private function _has_access() {
$class = $this->ci->router->class;
$action = $this->ci->router->method;
$full_action = $class . '/' . $action;
$acl = $this->ci->config->item('acl');
$arr_acl = array();
array_map(function($value) use (&$arr_acl){
$arr_acl = array_merge($arr_acl, $value);
}, array_values($acl));
if (isset($arr_acl[$full_action])
&& !in_array($full_action, $this->ci->user->permissions))
return false;
return true;
}
}
3-通过设置激活挂钩
enable_hooks
到
TRUE
在里面
config/config.php
:
$config['enable_hooks'] = TRUE;
4-设置
Autorization
钩
config/hooks.php
:
$hook['post_controller_constructor'][] = array(
'class' => 'Authorization',
'function' => 'authorize',
'filename' => 'Authorization.php',
'filepath' => 'hooks',
'params' => array()
);
5-添加权限的翻译,
language/english/permissions_lang.php
:
$lang['access_show_roles_list'] = "Show all roles.";
$lang['access_add_role'] = "Add new role.";
$lang['access_edit_role'] = "Update a role.";
$lang['access_delete_role'] = "Delete a role.";
$lang['access_change_role_status'] = "Change role stat Enabled/Disabled.";
$lang['access_permission_list'] = "Access to the permissions list.";
6-添加
acl.php
自动加载文件,在
config.autoload.php
:
$autoload['config'] = array('acl');
就是这样。