创建权限而不检查Codeigniter上的URI段

时间:2018-12-14 08:56:18

标签: php mysql codeigniter permissions

我的简单库中有一个函数,并在某些控制器上调用

$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段?

谢谢,抱歉我的英语不好

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

$this->router->class获取正在使用的控制器类;

$this->router->method获取被调用的方法;

$this->router->directory以获取目录,以防万一您的URL中包含子文件夹。

这样,您实际上不需要检查正在使用的URL。您只需检查控制器和方法即可。

这是与路线无关的方法。如果您有类似的东西:

  • users / get / 1
  • 用户/ marco-monteiro
在这些情况下,基于uri段的ACL可能很难。使用我提到的方法会更容易。