2010-08-28 2 views
0

Je construis une zone d'administration pour mon application avec CodeIgniter, j'ai créé un contrôleur d'administration de base dans la bibliothèque nommée: MY_Admin_Base qui étend le contrôleur CI. et là je vérifie dans la DB si l'admin a accès à la méthode.Comment puis-je empêcher le chargement de la fonction index avec __construct dans CodeIgniter?

class MY_Admin_Base extends Controller { 

    function __construct() 
    { 
     parent::Controller(); 


     //check if the admin has premission to the page 
     $this->load->model('admin_permissions_model'); 
     $query = $this->admin_permissions_model->get_admin_permission(
      array(
      'admin_id'=>$this->session->userdata('admin_id'), 
      'page_id'=>$pages_cat_id) 
      ); 

      if(!$query) 
       $this->view->load('admin/restricted_area'); 
    } 
} 

la classe principale qui étend MY_Admin_Base, et a la méthode de l'indice, quelque chose comme ça:

class Main extends MY_Admin_Base { 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function index() 
    {  
     $this->view->load('admin/main'); 
    } 
} 

le problème est que les deux vues sont chargés si l'administrateur does`nt ont accès .. .la vue restreinte et la vue principale.

quelqu'un a une suggestion?

Répondre

1

Dans la classe MY_Admin_Base créer une variable pour stocker si l'utilisateur ou non un admin:

class MY_Admin_Base extends Controller { 
    public $is_admin = true; 

Puis changer

if(!$query) 
    $this->view->load('admin/restricted_area'); 

à

if(!$query) { 
    $this->view->load('admin/restricted_area'); 
    $this->is_admin = false; 
} 

puis dans l'index fonction, changez le code pour.

function index() { 
    if(!$this->is_admin) return; 

    $this->view->load('admin/main'); 
} 
+0

mais j'ai besoin de faire la vérification pour chaque méthode? – CaTz

+1

Oui, vous devrez vérifier chaque méthode. Une alternative pourrait juste être d'utiliser le die(); fonction pour terminer l'exécution du code après le chargement de la vue restricted_area, bien que cela dépende de votre environnement, ce qui n'est pas forcément une bonne idée. Une autre alternative est de créer un tableau dans chaque contrôleur contenant les noms des méthodes "protected", puis utilisez in_array à l'intérieur du constructeur pour déterminer si l'utilisateur est autorisé à accéder à cette méthode, sinon appelez le die(); fonctionner ou utiliser une autre méthode plus sûre d'arrêter l'exécution de l'application. – Matthew

+0

OK ... merci! – CaTz

Questions connexes