2013-12-20 15 views
1

在笨,我有功能限制控制器,給在笨訪問特權時

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'); 
} 

的問題是,我需要對每個公共方法(控制器)做同樣的事情? 因爲,通過這樣做:我可以訪問子控制器。例如,我無法訪問代理的索引頁。但我可以訪問:代理/儀表板,代理/驗證等...

是否有任何方法來阻止整個控制器? 謝謝。

回答

0

我不知道你究竟是什麼意思,我已經使用CI 2年了。這可能是我的,但是..你可能想要使用一個authenticx庫,因爲你在你的控制器中請求了用戶數據,這在我看來並不好。

你應該像

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

,並檢查用戶是否適合瀏覽網頁,你只需要使用此功能

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

,並調用它在每一個公共空間,您想檢查這樣的用戶權利

$this->verifyUser(); 
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'); 
    } 
}