2011-06-28 10 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); 
    } 
} 
?> 

のための認証ライブラリを作成し、この1つはユーザコントローラ

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

私はベースコントローラーで「はい」と主張します。チェックを追加することもできます。

セキュリティコントローラーのコンストラクターを(オプションの)アクセスレベルにするようにしてください...)

また

あなたは、コントローラ内の特定のメソッドを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 

    } 
} 
関連する問題