在codeigniter中授予访问权限

时间:2013-12-20 22:40:46

标签: php codeigniter

在codeigniter中,我有限制控制器的功能,

private function controllerAccess(){
    $sessionArray = $this->session->userdata('logged_in');
    if($sessionArray['type'] == 'ADMIN' || $sessionArray['type'] == 'SUPERVISOR'){
        return true;
    }
    else{
        return false;
    }
}

我通过这样做阻止了我的索引控制器,

public function index(){
    $system = new SYSTEM();
    $this->controllerAccess() ? $this->dashboard() : $system->container('No Access');
}

问题是,我是否需要对每个公共方法(控制器)做同样的事情? 因为,通过这样做:我可以访问子控制器。例如,我无法访问代理的索引页面。但我可以访问:代理/仪表板,代理/验证等...

有没有办法阻止整个控制器? 感谢。

2 个答案:

答案 0 :(得分:0)

我不知道你的意思是什么,我已经使用CI 2年了。它可能是我但是..你可能想要使用一个authenticx库,因为你在控制器中请求用户数据,这在我看来并不好。

你应该像

$user = $this->authex->getSession();

要检查用户是否适合查看您只使用此功能的页面

private function verifyUser() {
        $user = $this->authex->getSession();
        if ($user == null)
            redirect('hub/notauthorized/', 'refresh');
    }

然后在每个要检查用户权限的公共函数中调用它

$this->verifyUser();

答案 1 :(得分:0)

只需在控制器的构造函数中运行该函数,然后每次控制器命中时该函数都会运行

class YourController extends CI_Controller {
   public function __construct()
   {
        parent::__construct();
        if(!$this->controllerAccess(){
            //you got a false so redirect or whatever you want to do on negative

        }
   }

   private function controllerAccess(){
        $sessionArray = $this->session->userdata('logged_in');
        if($sessionArray['type'] == 'ADMIN' || $sessionArray['type'] == 'SUPERVISOR'){
            return true;
        }
        else{
            return false;
        }
    }

   public function index(){
        $system = new SYSTEM();
        $this->controllerAccess() ? $this->dashboard() : $system->container('No Access');
    }
}