privilegi utenti php

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
Ciao a tutti =) so bene che questo è un argomento già trattato e infatti ho preso spunto per iniziare a creare almeno la struttura.

Ho creato nel DB un campo "grado" dove di default tutti gli utenti che si registrano vengono memorizzati come "member"
Il problema è che non capisco come fare il controllo del grado..

Questo è il codice fatto fin ora

Grazie per il vostro aiuto

pagina di login.php
PHP:
<?php 
	
	session_start();
	
	
	/*if(session_is_registered('Logged'))*/ 
	if (isset($_SESSION['auth']))  {
		
			header("location: backend.php");
	
	} else {
	
	

			if(!isset($_POST['submit'])) { 
		echo '<div id="box-login"> 
				<form method="post" action="#" id="accesso_utenti">
					<h3>Accesso Admin</h3>
					<div id="user"><span> Username </span><input type="text" name="username"> <br /></div>
					<div id="pass"><span> Password</span> <input type="password" name="pass"> <br /></div>
					<input type="submit" value="Entra" name="submit" id="bottone">
				</form>
			</div>';
	}
	else { 
		include 'config.php';
		include 'connect.php';
		$user = mysql_real_escape_string($_POST['username']); 
		$pass = mysql_real_escape_string($_POST['pass']);
		
		$query = sprintf("SELECT * FROM users WHERE username  = '" .$user ."' AND pass= '" .sha1($pass)."'");
		$result = mysql_query ($query, $conn) or die("Errore nella query");
		$num_rows = mysql_num_rows($result); 
		
	
		if ($num_rows == '1') {
			header("location:" . $path."/admin/backend.php");
			$_SESSION['auth']=$user;
			
			/*session_register("Logged");*/
			
			
}
		else {
			
			echo '<div class="benvenuto"> 
					<p>Dati errati: </p> 
					<a href="index.php">Ritenta</a>
				 </div>';
		}
		
		
	}
	
	}


?>

pagina protetta

PHP:
 <?php
session_start();

 if(!isset ($_SESSION['auth'] )) {
	 echo "effettua il login per accedere";
	 
	 if(isset ($_SESSION['grado' == "member"]  )) {
   	 	die('Non sei autorizzato ad accedere a questa pagina.');
	} 
 } 

 else
		{
				
			echo '<div class="benvenuto">
					<p>
						Benvenuto ' .$_SESSION['auth'].'! sei collegato al pannello di amministrazione. <br/>
						scegli quale pagina vuoi gestire! 
					</p> 
					
					<p> <a href="logout.php">Logout</a> </p>
					
						<a target="_blank" href="../index.php">torna al sito</a>
				 </div>';			
		
		?>
		
		Sono abilitato a vedere il contenuto
		
		<?php } ?>
        
        </div>
 
Per implementare un controllo del grado puoi aggiungere un campo alla tabella membri chiamato 'grado' e da li vedi il grado dell'utente e dai alcuni privilegi solo a chi ha un certo tipo di grado appunto contenuto in quel campo della tabella.
 
Ciao!
ho già creato un campo "grado" nel database però non riesco a gestirlo..

PHP:
if(isset ($_SESSION['grado' == "member"]  )) {
            die('Non sei autorizzato ad accedere a questa pagina.');
    }
 
Quindi vuoi limitare l'accesso ad alcune pagine a chi è solo un membro.
Quel codice è sbagliato, prova a correggerlo così:

PHP:
if(isset ($_SESSION['grado'] == "member" )) {

            die('Non sei autorizzato ad accedere a questa pagina.');

    }
 
Esattamente è proprio quello che devo fare.
Così però ci avevo già provato e mi da errore. Il login viene eseguto e non vedo la scritta: 'Non sei autorizzato ad accedere a questa pagina' e vengo regolarmente ricondotto a backend.php completamente bianca
 
Aspetta scusa un attimo. Ho corretto l'errore più lampante di quel codice e non l'altro.
Usa questo:
PHP:
if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" )) {



            die('Non sei autorizzato ad accedere a questa pagina.');



    }
Comunque in questo modo anche un utente che non é membro ha l'accesso alla pagina. Questo codice impedisce l'ingresso ai membri e basta.
 
mmm dici?

PHP:
if(!isset ($_SESSION['auth'] )) {
	 echo "effettua il login per accedere";
	
	if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" ) { 

             echo "non hai i privilegi";

    }  
 }

ho comunque il controllo if(!isset ($_SESSION['auth'] )) { per vedere se l'utente è loggato o no e gli utenti registrati vengono sempre forzati al grado di member
N.B. ['grado'] fa riferimento al nome della tabella nel database?
 
No fa riferimento alla variabile di sessione in cui devi mettere il grado presente nel db.
Va bene il controllo se hai anche l'altro su $_SESSION['auth'].
 
Ok! cmq ancora non funziona ç_ç
e sono in questa situazione..

PHP:
 <?php
session_start();

 if(!isset ($_SESSION['auth'] )) {
	 echo "effettua il login per accedere";
	
	if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" ) {

             echo "non hai i privilegi per accedere";

    }  
 }

Ti confermo che nel database ho il campo grado con la voce member..
 
All'atto dell'autenticazione e quindi nella pagina di login devi settare la variabile di sessione $_SESSION['grado'] attribuendo il valore del campo grado della tabella nel db.
 
ok ti ringrazio molto per la pazienza :)

ho provato ad interpretare quello che mi hai detto e ho fatto una query per estrarre il valore del campo grado per poi memorizzarla in $session['grado']
Funziona correttamente infatti stampandola a video si vedono tutti i gradi però deve esserci qualcosa che manca per far riconoscere l'associazione

if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" ) {


PHP:
         $query_grado = mysql_query("SELECT * FROM users")or die(mysql_error()); 
    	 if(mysql_num_rows($query_grado)>0){ 
         while ($rows = mysql_fetch_array($query_grado)) { 		
			$livello = $rows['grado'];
			$_SESSION['grado']=$livello;
			}
        }

pagina completa login.php

PHP:
session_start();
	
	
	/*if(session_is_registered('Logged'))*/ 
	if (isset($_SESSION['auth']))  {
		
			header("location: backend.php");
	
	} else {
	
	

			if(!isset($_POST['submit'])) { 
		echo '<div id="box-login"> 
				<form method="post" action="#" id="accesso_utenti">
					<h3>Accesso Admin</h3>
					<div id="user"><span> Username </span><input type="text" name="username"> <br /></div>
					<div id="pass"><span> Password</span> <input type="password" name="pass"> <br /></div>
					<input type="submit" value="Entra" name="submit" id="bottone">
				</form>
			</div>';
	}
	else { 
		include 'config.php';
		include 'connect.php';
		$user = mysql_real_escape_string($_POST['username']); 
		$pass = mysql_real_escape_string($_POST['pass']);
		
		 $query_grado = mysql_query("SELECT * FROM users")or die(mysql_error()); 
    	 if(mysql_num_rows($query_grado)>0){ 
         while ($rows = mysql_fetch_array($query_grado)) { 		
			$livello = $rows['grado'];
			$_SESSION['grado']=$livello;
			}
        }
	
		
		$query = sprintf("SELECT * FROM users WHERE username  = '" .$user ."' AND pass= '" .sha1($pass)."'");
		$result = mysql_query ($query, $conn) or die("Errore nella query");
		$num_rows = mysql_num_rows($result);
		
	
		if ($num_rows == '1') {

			header("location:" . $path."/admin/backend.php");
			$_SESSION['auth']=$user;
			
			
			/*session_register("Logged");*/
			
			
}
		else {
			
			echo '<div class="benvenuto"> 
					<p>Dati errati: </p> 
					<a href="index.php">Ritenta</a>
				 </div>';
		}
		
		
	}
	
	}


?>

pagina backend.php

PHP:
session_start();


 if(!isset ($_SESSION['auth'] )) {
	 echo "effettua il login per accedere";
	
	if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" ) {

             echo "non hai i privilegi per accedere";

    }   
 }
 
Quale associazione?
Prova a stampare il valore della sessione e vediamo cosa c'è.
 
ecco qua
questo script stampa "admin member" perchè ho due utenti (un admin e un member)
PHP:
$query_grado = mysql_query("SELECT * FROM users")or die(mysql_error()); 
         if(mysql_num_rows($query_grado)>0){ 
         while ($rows = mysql_fetch_array($query_grado)) {         
            $livello = $rows['grado'];
            $_SESSION['grado']=$livello;
            echo $_SESSION['grado']
            }
        }

Per associazione intendevo che nonostante questo assegnamento dopo aver estratto il valore dal DB, non viene accettato

PHP:
if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" ) {
 
Sicuro che accedi con il grado member?
Prova a stampare il valore della sessione nella pagina dove fai il controllo che non va.
 
si sono sicuro!
come puoi vedere ho stampato il valore della sessione echo $_SESSION['grado']; nella pagina backend.php

in quella posizione mi stampa sempre member

PHP:
 <?php
session_start();


 if(!isset ($_SESSION['auth'] )) {
	 echo "effettua il login per accedere";
	
	if(isset ($_SESSION['grado']) && $_SESSION['grado'] == "member" ) {

             echo "non hai i privilegi per accedere";

    }   
 } 

 else
		{
			 
		echo $_SESSION['grado'];
			
		include 'config.php';
		include 'connect.php';
		
		
		 $query_grado = mysql_query("SELECT * FROM users")or die(mysql_error()); 
    	 if(mysql_num_rows($query_grado)>0){ 
         while ($rows = mysql_fetch_array($query_grado)) { 		
			$livello = $rows['grado'];
			$_SESSION['grado']=$livello;
			
			}
        }
			echo '<div class="benvenuto">
			
					<p>
						Benvenuto ' .$_SESSION['auth'].'! sei collegato al pannello di amministrazione. <br/>
						scegli quale pagina vuoi gestire! 
					</p> 
					
					<p> <a href="logout.php">Logout</a> </p>
					
						<a target="_blank" href="../index.php">torna al sito</a>
				 </div>';			
		
		?>
		
		Sono abilitato a vedere il contenuto
		
		<?php } ?>
 
Fai delle prove per vedere dove è l'intoppo.
Puoi provare a dividere la condizione isset da quella =="member" per vedere quale blocca.
 

Discussioni simili