Account multilivello

Sileno Perina

Nuovo Utente
1 Lug 2015
2
0
0
23
Castel d'Azzano
Salve a tutti.
Spiego velocemente la mia situazione: ho creato un sito con alcune pagine protette in PHP, servendomi di un database per immagazzinare i dati di autenticazione degli utenti. Premetto che sono piuttosto a digiuno di PHP: infatti ho dovuto seguire delle indicazioni ben precise per creare i file in PHP, ma alla fine sono riuscito nell'"impresa", con risultati abbastanza soddisfacenti. Qui arriva il mio problema: data l'esigenza di dover differenziare tra utente "standard", amministratore e utente con permessi speciali, ho cercato nel forum una soluzione, e in effetti ne ho trovata una (http://forum.mrwebmaster.it/php/28827-login-mysql-sessioni-livelli-logout.html), ma non so come adattare la soluzione di criric al mio sito.
Mi riferisco a questa particolare sezione di codice:

PHP:
<?php
$_SESSION['livello'] = $row['livello'];
?>
Il motivo per cui non riesco a integrare questa parte di codice è molto semplice: a differenza di Davide Rossitto, io ho creato una classe, che viene richiamata da una funzione all'inizio della pagina di login, e non ho la più pallida idea di dove mettere questa riga. Se avessi creato come lui un file login.php molto più semplice, adesso probabilmente avrei una mezza idea di cosa fare, ma ho scelto un'altra strada (anche perché mi sembra migliore, a parer mio).

Per completezza posto il codice della mia classe (ovviamente ho tolto tutti i dati riservati):

PHP:
<?php  
    // error_reporting(E_ALL | E_DEPRECATED | E_STRICT);  
      
    Class Users{  
        /******************************** 
        SETTING 
        *********************************/  
        // le credenziali di accesso al database  
        private $host_db = '';  
        private $user_db = '';  
        private $pass_db = '';  
        private $name_db = '';  
        // gli url che gestiranno le operazioni di login  
        public $Urls = array(  
                            'login_page'    => '',  
                            'register_page' => ',  
                            'logout_page'   => ''  
                            );  
          
 
        /*risorse di connessione*/  
        protected $conn;  
        protected $selezione_db;  
          
        /*variabili di registrazione*/  
        protected $reg_username;  
        protected $reg_email;  
        protected $reg_pass;  
        protected $reg_confirm_pass;  
        protected $reg_crypt_pass;  
          
        /*variabili di login*/  
        protected $login_username;  
        protected $login_password;  
        protected $login_cryptpass;  
        protected $login_iduser;  
          
        /*variabili per gestire gli errori*/  
        public $messages = array(  
                        1 => 'Il campo username &egrave; obbligatorio.',  
                        2 => 'Il campo e-mail &egrave; obbligatorio.',  
                        3 => 'Il campo password &egrave; obbligatorio.',  
                        4 => 'Le due password non coincidono.',  
                        5 => 'Il campo username contiene caratteri non validi. Sono consentiti solo lettere, numeri il i seguenti simboli . _ -.',  
                        6 => 'Inserisci una e-mail con sitassi corretta.',  
                        7 => 'La password scelta &egrave; troppo breve. Scegli una password di almeno 8 caratteri.',  
                        8 => 'Esiste gi&agrave; un utente registrato con questo username.',  
                        9 => 'Esiste gi&agrave; un utente registrato con questa e-mail.',  
                        10 => 'Registrazione avvenuta con successo.',  
                        11 => 'Username e/o password sono errati',  
                        12 => '',  
                        13 => 'Logout eseguito con successo.',  
                        14 => 'Per accedere a questa pagina occorre essere loggati.'  
                        );  
          
        public $message_script;  
          
        // il costruttore attiva la connessione a mysql  
        public function __construct(){  
            $this->connessione();  
            }  
        /****************** 
        CONNESSIONE A MYSQL 
        ******************/  
        protected function connessione(){  
            $this->conn = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die(mysql_error());  
            $this->selezione_db = mysql_select_db($this->name_db, $this->conn) or die(mysql_error());  
            return TRUE;  
            }  
              
        /************************************* 
        ALCUNI METODI PER ESEGUIRE VALIDAZIONI 
        *************************************/  
          
        // verifica campo generico non vuoto (TRUE se non vuoto)  
        public function empty_string($string){  
            $string = trim($string);  
            if($string==''){  
                return TRUE;  
                }  
            else{  
                return FALSE;  
                }  
            }  
          
        // verifica sintassi username  
        public function is_username($username){  
            $regex = '/^[a-z0-9\.\-_]{3,30}$/i';  
            return preg_match($regex, $username);  
            }  
          
        // verifica sintassi email (TRUE se ok)  
        public function is_email($email){  
            $regex = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/';  
            return preg_match($regex, $email);  
            }  
              
        // verifica sintassi password (per semplicità solo lunghezza) (TRUE se ok)  
        public function is_secure_password($password){  
            if(strlen($password)>=8){  
                return TRUE;  
                }  
            else{  
                return FALSE;  
                }  
            }  
                  
        /***************************************************** 
        METODI PER VERIFICARE ESISTENZA DI USERNAME E PASSWORD 
        ******************************************************/  
          
        // verifica esistenza username (TRUE se esiste)  
        public function isset_username($username){  
            $query = "SELECT COUNT(username) AS count   
                        FROM users   
                        WHERE username='".mysql_real_escape_string($username)."'   
                        LIMIT 1";  
            $result = mysql_query($query) or die(mysql_error());  
            $row = mysql_fetch_array($result);  
            if($row['count']==1){  
                return TRUE;  
                }  
            else{  
                return FALSE;  
                }  
            }  
          
        // verifica esistenza email (TRUE  se esiste)  
        public function isset_email($email){  
            $query = "SELECT COUNT(email) AS count   
                        FROM users   
                        WHERE email='".mysql_real_escape_string($email)."'   
                        LIMIT 1";  
            $result = mysql_query($query) or die(mysql_error());  
            $row = mysql_fetch_array($result);  
            if($row['count']==1){  
                return TRUE;  
                }  
            else{  
                return FALSE;  
                }  
            }  
          
        /****************************** 
        I FORM DI LOGIN E REGISTRAZIONE 
        ******************************/  
        public function get_login_form(){  
            $html = '  
                <form action="' .$this->Urls['login_page']. '" method="post"> 
                <center> 
                <input type="text" name="username" id="field" placeholder="Username" /><br><br> 
                <input type="password" name="pass" id="field" placeholder="Password" /><br><br>
                <input type="submit" name="login" value="Accedi" id="accedi"/>&nbsp;
                <input type="reset" name="reset" value="Reimposta campi" id="accedi"/><br>
				<a href="index.php"><button type="button" name="home" id="home"/>Torna alla home</button></a>
				</center>
                </form>';  
            return $html;  
            }  
          
        public function get_register_form(){  
            $html = '  
                <form action="' .$this->Urls['register_page']. '" method="post">  
                <center>   
                 <input type="text" name="username" id="field" placeholder="Username" /><br><br>
                 <input type="text" name="email" id="field" placeholder="E-mail" /><br><br>
                 <input type="password" name="pass1" id="field" placeholder="Password" /><br><br>   
                 <input type="password" name="pass2" id="field" placeholder="Ripeti password" /><br><br>  
                 <input type="submit" name="register" value="Registrati" id="accedi" />&nbsp;  
                 <input type="reset" name="reset" value="Reimposta campi" id="accedi" />  
                 </center>  
                 </form>';  
            return $html;  
            }  
          
        /***************************** 
        LINK LOGOUT 
        *****************************/  
        public function get_link_logout(){  
            if($this->is_logged()){  
                return '<a href="'.$this->Urls['logout_page'].'" id="logout">Logout</a>';  
                }  
            return '';  
            }  
              
        /******************************* 
        METODO PER CRIPTARE LE PASSWORD 
        *******************************/  
        public function crypt_pass($pass){  
            return sha1($pass);  
            }  
          
        /***************************** 
        ESECUZIONE DELLA REGISTRAZIONE 
        ******************************/  
        public function esegui_registrazione(){  
            // se il form e i suoi input sono stati inviati  
            if(isset($_POST['register']) AND   
                isset($_POST['username']) AND   
                isset($_POST['email']) AND   
                isset($_POST['pass1']) AND   
                isset($_POST['pass2'])){   
                //valorizziamo alcune variabili  
                $this->reg_username = trim($_POST['username']);  
                $this->reg_email = trim($_POST['email']);  
                $this->reg_pass = trim($_POST['pass1']);  
                $this->reg_confirm_pass = trim($_POST['pass2']);  
                // criptiamo la password  
                $this->reg_crypt_pass = $this->crypt_pass($this->reg_pass);  
                // eseguiamo la validazione degli input  
                $valid_input = $this->check_input_registrazione();  
                // se sono validi  
                if($valid_input===TRUE){  
                    // inseriemo all'interno del database i dati  
                    $this->query_insert_registrazione();  
                    // settiamo il messaggio di successo della registrazione  
                    $this->message_script = 10;  
                    return TRUE;  
                    }  
                }  
            return FALSE;  
            }  
          
        // verifica che gli input siano corretti  
        protected function check_input_registrazione(){  
            if($this->empty_string($this->reg_username)){  
                $this->message_script = 1;  
                return FALSE;  
                }  
            else if($this->empty_string($this->reg_email)){  
                $this->message_script = 2;  
                return FALSE;  
                }  
            else if($this->empty_string($this->reg_pass)){  
                $this->message_script = 3;  
                return FALSE;  
                }  
            else if($this->reg_pass != $this->reg_confirm_pass){  
                $this->message_script = 4;  
                return FALSE;  
                }  
            else if(!$this->is_username($this->reg_username)){  
                $this->message_script = 5;  
                return FALSE;  
                }  
            else if(!$this->is_email($this->reg_email)){  
                $this->message_script = 6;  
                return FALSE;  
                }  
            else if(!$this->is_secure_password($this->reg_pass)){  
                $this->message_script = 7;  
                return FALSE;  
                }  
            else if($this->isset_username($this->reg_username)==TRUE){  
                $this->message_script = 8;  
                return FALSE;  
                }  
            else if($this->isset_email($this->reg_email)==TRUE){  
                $this->message_script = 9;  
                return FALSE;  
                }  
            return TRUE;  
            }  
          
        // esecuzione della query insert di registrazione  
        protected function query_insert_registrazione(){  
            $query = "  
                        INSERT INTO users   
                        SET   
                            username='".mysql_real_escape_string($this->reg_username)."',   
                            pass='".mysql_real_escape_string($this->reg_crypt_pass)."',   
                            email='".mysql_real_escape_string($this->reg_email)."',   
                            data_reg= NOW()";  
            $result = mysql_query($query) or die(mysql_error());  
            return mysql_insert_id();  
            }  
              
        /******************* 
        ESECUZIONE DEL LOGIN 
        ********************/  
        public function esegui_login(){  
            // se il form di login e i sui tutti input sono stati inviati   
            if(isset($_POST['login']) AND isset($_POST['username']) AND isset($_POST['pass'])){  
                // valorizziamo delle variabili  
                $this->login_username = trim($_POST['username']);  
                $this->login_password = trim($_POST['pass']);  
                // criptiamo la password  
                $this->login_cryptpass = $this->crypt_pass($this->login_password);  
                // validiamo i dati (non devono essere vuoti)  
                $not_empty_input = $this->check_input_login();  
                // se la validazione &egrave; andata a buon fine  
                if($not_empty_input===TRUE){  
                    // eseguiamo la query e verifichiamo se individua le credenziali  
                    if($this->query_select_login()==TRUE){  
                        // settiamo lo status di utente loggato  
                        $this->set_logged($this->login_iduser);  
                        // settiamo l'username  
                        $this->set_username($this->login_username);  
                        // settiamo il messaggio di successo del login  
                        $this->message_script = 12;  
                        return TRUE;  
                        }  
                    // se la query non ha trovat utenti con quelle credenziali  
                    else{  
                        //  settiamo un messaggio di insuccesso dell'operazone  
                        $this->message_script = 11;  
                        }  
                    }  
                }  
            return FALSE;  
            }  
          
        // verifica che gli input del login non siano vuoti  
        protected function check_input_login(){  
            if($this->empty_string($this->login_username)){  
                $this->message_script = 1;  
                return FALSE;  
                }  
            else if($this->empty_string($this->login_password)){  
                $this->message_script = 3;  
                return FALSE;  
                }  
            return TRUE;  
            }  
          
        // esecuzione della qeury per verificare il login  
        protected function query_select_login(){  
            $query = "  
                        SELECT id FROM users   
                        WHERE   
                            username='".mysql_real_escape_string($this->login_username)."' AND   
                            pass='".mysql_real_escape_string($this->login_cryptpass)."'";  
            $result = mysql_query($query) or die(mysql_error());  
            // se individua l'utente  
            if(mysql_num_rows($result)==1){  
                $row = mysql_fetch_array($result);  
                $this->login_iduser = $row['id'];
				/* livelli */
                return TRUE;  
                }  
            return FALSE;  
            }  
              
        /*********************************** 
        VERIFICA DELLO STATO DI LOGIN UTENTE 
        ***********************************/  
          
        // verifica login  
        public function is_logged(){  
            return isset($_SESSION['auth']);  
            }  
          
        // set login  
        protected function set_logged($id_user){  
            $_SESSION['auth'] = $id_user;  
            return;  
            }  
          
        // access denied  
        public function access_denied(){  
            if(!$this->is_logged()){  
                header("location: ".$this->Urls['login_page']."?message=14");  
                exit;  
                }  
            return;  
            }  
      
        protected function set_username($username){  
            $_SESSION['username_logged'] = $username;  
            return;  
            }  
          
        public function get_username(){  
            return isset($_SESSION['username_logged']) ? $_SESSION['username_logged'] : '';  
            }     
              
        // logout  
        public function logout(){  
            session_unset();  
            session_destroy();  
            setcookie(session_name(), '', time()-42000, '/');  
            header("location: ".$this->Urls['login_page']."?message=13");  
            return;  
            }  
      
        /***************************** 
        METODO PER OTTENERE I MESSAGGI 
        ******************************/  
        public function get_message(){  
            if(isset($_GET['message'])){  
                $this->message_script = $_GET['message'];  
                }  
            $key = intval($this->message_script);  
            if(array_key_exists($key, $this->messages)){  
                return $this->messages[$key];  
                }  
            return FALSE;  
            }  
        }  
    ?>
Ringrazio in anticipo chi mi saprà aiutare!