我的简单库中有一个函数,并在某些控制器上调用
$activeUrl = str_replace(base_url(),"",current_url());
erporate_acl::has_permission($activeUrl);
然后是我的库代码,这里的代码尝试匹配数据库中的当前URI($ param)数据:
public static function has_permission($param){
$CI =& get_instance();
$CI->load->model('acl_model');
$user = $CI->session->userdata('user');
$arrPerms = $CI->acl_model->permissions($user);
$currentMeth = strtolower(str_replace("::", "/", $param));
$result = "";
if (!empty($arrPerms))
{
if (strpos($currentMeth,'edit') !== false || strpos($currentMeth,'view') !== false || strpos($currentMeth,'delete') !== false) {
$str = preg_replace('#\/[^/]*$#', '', $currentMeth);
$result = in_array($str, $arrPerms);
}else{
$result = in_array($currentMeth, $arrPerms);
}
}else{
$result = false;
}
if ($result == false) {
show_error("<font size='+1'>Sorry, You Don't Allowed to Access !</font><br><a href='".@$_SERVER['HTTP_REFERER']."'>Back to Previous Page</a>");
}
}
我上面脚本的要点是与in_array
匹配,如果in_array
返回false则我们收到错误消息,否则允许访问该页面
是否可以创建权限而不检查URI段?
谢谢,抱歉我的英语不好
答案 0 :(得分:0)
您可以使用以下内容:
$this->router->class
获取正在使用的控制器类;
$this->router->method
获取被调用的方法;
$this->router->directory
以获取目录,以防万一您的URL中包含子文件夹。
这样,您实际上不需要检查正在使用的URL。您只需检查控制器和方法即可。
这是与路线无关的方法。如果您有类似的东西: