2011-06-28 59 views
2

我的登錄保護成員區域有許多子部分和控制器。檢查整個站點部分的驗證(多個控制器)

爲了檢查用戶是否登錄並允許在那裏,我只是將我的auth->is_logged_in()方法放在每個控制器的構造函數中。

建立一個基本控制器是否值得創建一個基本控制器,然後在所有成員區域控制器上進行檢查? (最佳做法?)

回答

1

我創建驗證庫這個

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Auth 
{ 
    private $CI; 
    private $redirect; 

    function __construct() 
    { 
     $this->CI =& get_instance(); 
     $this->redirect = 'home/login'; 
    } 

    function _redirect($redirect, $rurl) 
    { 
     redirect(($rurl == '') ? $this->redirect : $rurl); 
    } 

    function check_login($redirect = FALSE, $rurl = '') 
    { 
     if($this->CI->session->userdata('logged') == TRUE) { 
      return TRUE; 
     } 
     $this->_redirect($redirect, $rurl); 
    } 

    function check_admin($redirect = FALSE, $rurl = '') 
    { 
     if($this->CI->session->userdata('user_type') == 'administrator') { 
      return TRUE; 
     } 
     $this->_redirect($redirect, $rurl); 
    } 
} 
?> 

而這一次是在用戶控制器

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Users extends CI_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 

     $this->load->library('auth'); 
     // second param is optional // will redirect if not admin // 
     $this->auth->check_admin(TRUE, 'admin/login'); 
    } 

希望這可以幫助你,讓我們知道有沒有什麼...謝謝!!

2

我會在基礎控制器上爭論。您也可以添加額外的檢查。

我建議你把它叫做Secured_Controller(或類似的東西),使安全控制器的構造帶(可選)訪問級別(所以你可以有一些只是登錄的用戶,有的爲管理員等...)

也使其採取任何訪問級別(但是提供gaurd方法,這樣你就可以在gaurd控制器的具體方法和讓別人跑免費

例:

管理控制器

class Admin_Controller extends Secure_Controller 
{ 
    public __construct() 
    { 
     parent::__construct(ACCESS_LEVEL_ADMIN); 
    } 
} 

部分地固定控制器

class Partial_Controller extends Secure_Controller 
{ 
    public __construct() 
    { 
     parent::__construct(); 
    } 

    public function Index() 
    { 
     $this->GaurdPermissions(ACCESS_LEVEL_ADMIN); // Would redirect if not enough permissions 

    } 
}