Ruoli utenti - problema

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, io ho questo codice e non so il motivo perché entra anche l'utente semplice..
il simbolo || non è OR? Se non ricordo male.. perché non riesco ad far che entra solo l'1 e il 2 che sarebberono Admin e Moderatore..
invece entra anche il 3.. che sarebbe l'utente..

come mai?

Vi posto il codice:
PHP:
<?php
session_start();
require_once(dirname(__FILE__) . '/../include.php'); 
if(isset($_SESSION["user_level"]) == 1 || isset($_SESSION["user_level"]) == 2 )
{
}
else
{
$login_msg = "Non hai acceso ad accedere in questa area";
}
 if(isset($login_error)){ echo $login_error;}
if(isset($login_msg)){ echo $login_msg;} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <title></title>
    <link href="style.css" rel="stylesheet" type="text/css" />
<body>
 <div id='page'>
      <div id='header'>
        <div id='site-title'><a href="index.php"></a></div>
        <div id='site-subtitle'>Amministratore</div>
	<div id='navigation'>
		<a href="index.php">Home</a> 
		<span class="separator"> | </span> 		
		<a href="index.php?m=news">News</a>
		<span class="separator"> | </span> 		
		<a href="index.php?m=pagine">Pagine</a>
		<span class="separator"> | </span> 		
		<a href="index.php?m=articoli"> Articoli</a>
		<span class="separator"> | </span> 
		<a href="index.php?m=utenti">Utenti</a>
     <span class="separator"> | </span> 
		<a href="logout.php">Esci</a></div>
	 </div>
      <hr class='hidden' />
      <div id='main'>
        <div id='content'>
<?php require_once(dirname(__FILE__) . '/module.php');?>
</div>
      <hr class='hidden' />
      <div id='footer' align="center">
	  &copy; 2012 - v1.5 :: Luigi  ::
         </div>
    </div>
</body>
</html>
<?php } ?>

Grazie mille.
 
Ultima modifica:
ciao
ho aggiunto il tag head e chiuso un div rimasto aperto

cmq la condizione sembra giusta

prova cosi dichiarando prima $login_msg come stringa vuota e poi verificandolo

PHP:
<?php
session_start();
require_once(dirname(__FILE__) . '/../include.php');
$login_msg = "";
if (isset($_SESSION["user_level"]) == 1 || isset($_SESSION["user_level"]) == 2) {
    
} else {
    $login_msg = "Non hai acceso ad accedere in questa area";
}
if (isset($login_error)) {
    echo $login_error;
}
if ($login_msg != "") {
    echo $login_msg;
} else {
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title></title>
            <link href="style.css" rel="stylesheet" type="text/css" />
        </head>
        <body>
            <div id='page'>
                <div id='header'>
                    <div id='site-title'><a href="index.php"></a></div>
                    <div id='site-subtitle'>Amministratore</div>
                    <div id='navigation'>
                        <a href="index.php">Home</a> 
                        <span class="separator"> | </span>         
                        <a href="index.php?m=news">News</a>
                        <span class="separator"> | </span>         
                        <a href="index.php?m=pagine">Pagine</a>
                        <span class="separator"> | </span>         
                        <a href="index.php?m=articoli"> Articoli</a>
                        <span class="separator"> | </span> 
                        <a href="index.php?m=utenti">Utenti</a>
                        <span class="separator"> | </span> 
                        <a href="logout.php">Esci</a></div>
                </div>
                <hr class='hidden' />
                <div id='main'>
                    <div id='content'>
                        <?php require_once(dirname(__FILE__) . '/module.php'); ?>
                    </div>
                    <hr class='hidden' />
                    <div id='footer' align="center">
                        &copy; 2012 - v1.5 :: Luigi  ::
                    </div>
                </div>
            </div>
        </body>
    </html>
<?php } ?>
 
Ultima modifica:
Prova a riscriverlo così:
PHP:
<?php
session_start();

// tolta inutile chiamata a dirname()
require_once __DIR__ . '/../include.php'; 

// qui usavi isset() che sarà sempre TRUE, dunque permetteva l'accesso a tutti
// inoltre usiamo in_array() con controllo di uguaglianza di tipo strict (===)
if (!isset($_SESSION['user_level']) || !in_array($_SESSION['user_level'], array(1, 2), true)) {
    // inviamo l'apposito header HTTP
    header('HTTP/1.0 403 Forbidden');

    // terminiamo l'esecuzione dello script, inutile settare la variabile per visualizzarla oltre
    die('Non hai acceso ad accedere in questa area');
}
?>
 
Prova a riscriverlo così:
PHP:
<?php
session_start();

// tolta inutile chiamata a dirname()
require_once __DIR__ . '/../include.php'; 

// qui usavi isset() che sarà sempre TRUE, dunque permetteva l'accesso a tutti
// inoltre usiamo in_array() con controllo di uguaglianza di tipo strict (===)
if (!isset($_SESSION['user_level']) || !in_array($_SESSION['user_level'], array(1, 2), true)) {
    // inviamo l'apposito header HTTP
    header('HTTP/1.0 403 Forbidden');

    // terminiamo l'esecuzione dello script, inutile settare la variabile per visualizzarla oltre
    die('Non hai acceso ad accedere in questa area');
}
?>

ora in questo modo non entro nessun con tre gli utenti che ho nel db .. e non entro nemmeno con l'amministratore e moderatore..
come mai?

grazie mille.
 
eccolo .. ma non è possibile...:

Codice:
Notice: Undefined index: user_level in D:\xampp\htdocs\3\admin\index.php on line 6
NULL Non hai acceso ad accedere in questa area

che dice?
 
Ah, accade proprio perché il valore viene salvato in sessione come stringa. Fai così:
PHP:
if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1, 2), true)) {

grazie mille con questa abbiamo risolto...

ora ti chiedevo una cosa se devo aggiungere altri ruoli .. basta che metto array(1,2,3,4) ??

giusto??

ti ringrazio molto.. buona serata .. ora mi sento un pò di musica...

a domani..
saluti.luigi.
 
Sì, giusto. Anche se alla lunga così diventa piuttosto complicato. Dovresti usare una libreria esterna (es. il componente Security del Web framework Symfony2).

ok, ma tanto ne uso solo 3 di ruoli per questo che devo fare...

volevo sapere mi dici come fare se l'utente semplice gli dice di ritornare indietro e o di fare logout?..

in poche parole di far venire i messaggi alla tipologia di utente..

Perchè ora blocca la pagina dicendo che "non hai acesso ad questa area"..
ma per far venire i messaggi diversi?

grazie mille.
 
ciao, lo devo mettere dentro al'if questo:
if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1, 2), true)) {

qui:
}

dimmi se va bene e poi ci sentiamo verso sera..che devo andare via..
buona giornata.

grazie mille.
 
Sì, esattamente.

ciao, ancora ultimo piccolo problema..

il problema è che quando non è stato fatto nessun acesso .. lo script da cosi:
PHP:
Notice: Undefined index: user_level in D:\xampp\htdocs\4\admin\index.php on line 11
Non hai acceso ad accedere in questa area.. fai i login Login

e nella linea 11 c'è questo:
PHP:
	switch ($_SESSION['user_level']) {
    case 1:
        // messaggio per ruolo 1
        break;
    case 2:
        // messaggio per ruolo 2
		break;

    default:
etc..

segnala non definita la variabile dello Switch come posso rimediare ?

un'altra cosa come posso mettere un login = true per dire che è loggato o no oltre ai livelli degli ruoli:?
PHP:
if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1, 2), true)) {

grazie mille.
 
Aggiungi questo subito prima dello switch:
PHP:
$level = isset($_SESSION['user_level']) ? (int)$_SESSION['user_level'] : false;
E modifica lo switch in modo che sfrutti questa nuova variabile:
PHP:
switch ($level) {
Il controllo sul login viene già fatto controllando se la variabile di sessione user_level esiste.
Se vuoi che venga visualizzato un messaggio personalizzato per gli utenti non loggati puoi metterlo in case false.
 
Aggiungi questo subito prima dello switch:
PHP:
$level = isset($_SESSION['user_level']) ? (int)$_SESSION['user_level'] : false;
E modifica lo switch in modo che sfrutti questa nuova variabile:
PHP:
switch ($level) {
Il controllo sul login viene già fatto controllando se la variabile di sessione user_level esiste.
Se vuoi che venga visualizzato un messaggio personalizzato per gli utenti non loggati puoi metterlo in case false.
grazie mille... per i login come si fa a mettero con case false senza modificare il codice sopra?

mi protesti scrivere il codice .. grazie mille.

ti ringrazio molto..

buona serata.
 

Discussioni simili