Presumendo che nella pagina di login tu abbia correttamente valorizzato $_SESSION['level'], il tuo metodo dovrebbe essere giusto come ragionamento, ma è meglio fargli restituire esplicitamente false quando la condizione non è veritiera:
PHP:
public function is_logged_admin(){
if(isset($_SESSION['level']) && $_SESSION['level'] == 2 ){
return true;
}
return false;
}
Nelle pagine che vuoi proteggere, puoi applicare il ragionamento inverso rispetto a quello che hai fatto:
PHP:
<?php
// Se lo user connesso NON dispone di permessi da amministratore
if (!$user->is_logged_admin()) {
// ferma l'esecuzione dello script
exit();
}
?>
Contenuto pagina da proteggere..
Quanto al redirect..
PHP:
header('Location: login.php');
..devi considerare due fattori importanti:
Il primo è che non puoi inviare header al browser se è già partito un qualsiasi output dallo script (anche uno spazio bianco per intenderci, in quanto questo fa si che php invii tutte le intestazioni di default, ignorando quindi successive richieste), di conseguenza questo controllo è un operazione che dovresti fare in una porzione di script posto ad inizio file e inoltre devi assicurarti che in eventuali files inclusi precedentemente (oltre a non esserci echo o print di sorta) il tag di apertura <?php non abbia nessuno spazio a precederlo.
Nel caso sia presente un qualsiasi output il redirect non funzionerà.
La seconda è che anche se invii il tag header per effettuare il redirect con successo, il tuo script continuerà l'esecuzione, di conseguenza potrebbe non essere molto difficoltoso per un possibile maleintenzionato ignorare l'header e visualizzare comunque la pagina protetta. E' importante quindi terminare l'esecuzione dello script dopo ogni redirect.
A fronte di queste informazioni, per come la vedo io, il modo più pratico per gestire il redirect utente è scrivere una funzione che si occupi di risolvere autonomamente questo tipo di problematiche:
PHP:
function redirect($url) {
// verifico che sia ancora possibile spedire header al browser
if (!headers_sent()) {
// e quindi ne invio uno per effettuare il redirect
header("Location: {$url}", true);
} else {
// se non posso mandare header, allora uso javascript per il redirect
echo "<script>self.location.href='{$url}';</script>";
}
// termino lo script, in quanto ora è compito del client soddisfare il redirect
exit();
}
Questa funzione ti consiglio di salvarla in un nuovo file, magari chiamato
functions.php, e posizionarlo nella cartella includes.
A questo punto dovrai solo includere il file dove ti occorre quella funzione, inoltre nello stesso ti sarà semplice aggiungere nuove funzioni qualora ti occorrano, permettendoti quindi di riutilizzare quelle definizioni ovunque ne necessiti.
Sfruttando la funzione che ti ho scritto, il tuo controllo finale potrebbe diventare tranquillamente qualcosa del genere:
PHP:
<?php
// Se lo user connesso NON dispone di permessi da amministratore
if (!$user->is_logged_admin()) {
// redireziona l'utente e ferma l'esecuzione dello script
redirect('login.php');
}
?>
Contenuto pagina da proteggere..