Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Chiarimenti Livelli utente e protezione

    Salve a tutti premetto che non sono molto esperto cerco di imparare.
    Vorrei realizzare nel mio sito web 2 livelli di utenza:
    1. Amministratore
    2. Utente

    In base a quello che son riuscito a realizzare finora riesco, tramite sessione, a memorizzare le credenziali di utente e password e quindi entrare nella pagina di amministratore esclusivamente con il login.
    Nella tabella degli utenti ho inserito un campo che si chiama Livello con valore predefinito "1" per gli user; per gli amministratori il valore sarà "2" (e sarà modificato manualmente nel database visto che sono solo 2 gli amministratori).
    Il problema è che quando faccio il login sia con dati user sia con dati admin riesco ad entrare nelle pagine cambiando manualmente la pagina nella barra degli indirizzi.
    Dove sbaglio? Vi chiedo se avete un link o una guida dove poter confrontarmi e capire bene dov'è l'errore.
    Grazie a tutti

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    devi fare un controllo sui permessi. in pratica una casa del tipo

    Codice PHP:
    if($_SESSION['tipoutente'] != "admin")
    header("Location: index.php"); 
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Nella mia pagina di login.php ho:

    codice:
    <?php
    	if (Login())
    	{
    		header('Location: admin/indexAdmin.php');
    		exit;
    	}
    	
    	if (isset($_POST["submit"]))
    	{
    		$Username = $_POST['Username'];
    		$Password = $_POST['Password'];
    		
    		$query = "SELECT ID, Username, Livello FROM anagrafica ";
    		$query .= "WHERE Username = '" .$Username ."'";
    		$query .= "AND Password = '" .$Password ."'";
    		
    		$Risultato = mysql_query($query, $conn);
    			
    		if (!$Risultato)
            {
               	die("Username o passowrd inesistenti " . mysql_error());
            }
    
    		if (mysql_num_rows($Risultato) == 1)
    		{
    			//Ricerca utente andata a buon fine
    			$messaggio .= "Utente trovato login effettuato";
    			$trovato   = mysql_fetch_array($Risultato);	
    			$_SESSION['ID'] = $trovato['ID'];
    			$_SESSION['Username'] = $trovato['Username'];
    			$_SESSION['Livello'] = $trovato['Livello'];
    			
    			if ($_SESSION['Livello'] != "1")  
    			{
    			header("Location: admin/indexAdmin.php");
    			exit;
    			}
    			if ($_SESSION['Livello'] != "0")
    			{
    			header("Location: admin/indexUser.php");
    			exit;
    			}
    			
    		}
    		
    		else
    		{
    			//Ricerca non riuscita
    			$messaggio = "<script type=\"text/javascript\">alert(\"Attenzione! Username o password errati! Riprovare o contattare l'amministratore.\"); history.go(-1)</script>";
    		}
    }				
    ?>
    Mentre nella pagina di destinazione c'è un include con il controllo:
    codice:
    <?php 
    function Login() 
    { 
    return isset($_SESSION['Username']); 
    } 
    function ConfermaLogin() 
    { 
    if(!Login()) 
    { 
    header("Location: ../index.php?page=home"); 
    exit; 
    } 
    } 
    ?>

  4. #4
    Qualcuno può indicarmi una guida o un topic che riguarda il mio problema? Grazie.

  5. #5
    Basta la logica, non serve una guida...

    codice:
    if (Login())
    	{
    		header('Location: admin/indexAdmin.php');
    		exit;
    	}
    function Login() 
    { 
    return isset($_SESSION['Username']); 
    }
    Come vedi sbagli il controllo...tu non devi verificare se esiste una varibile di sessione con Usernme ma devi verificare che il livello sia corretto...
    Dovrai quindi creare qualcosa del tipo
    codice:
    function is_admin() 
    { 
    return isset($_SESSION['Livello']) and $_SESSION['Livello'] == 2;
    } 
    
    function is_utente()
    { 
    return isset($_SESSION['Livello']) and $_SESSION['Livello'] == 1;
    }
    e in tutte le pagine admin farai una verifica del tipo
    codice:
    include_once("controlli.php");
    if !is_admin(){
       echo "Permessi insufficienti";
       die();
    }
    mentre nelle pagine utente
    codice:
    include_once("controlli.php");
    if !is_utente(){
       echo "Permessi insufficienti";
       die();
    }
    Ovviamente ci sono modi più eleganti, semplici, sicuri e facili da gestire, ma ti lascio come esercizio trovarli

  6. #6
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    senza contare che all'inizio di ogni pagina devi cominciare con
    Codice PHP:
    session_start(); 
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.