GDRCD 5.5 Nuova gestione permessi
GDRCD 5.5 Nuova gestione permessi postato il 04/08/2021 11:01:29 nel forum programmazione, open source e hosting
ciao a tutti, sto cercando di realizzare una nuova gestione dei permessi non piu scalare ma personalizzata, ho creato una tabella con i seguenti parametri:
Nome
AdminRegno
AdminVice
AdminMaster
AdminMestieri
AdminBacheche
i campi Admin sono int(1) anche se sono intenzionato a farli booleani ma questo è un altro discorso
il sistema che sto cercando d'integrare estrapola il contenuto di questa tabella e da accesso, per esempio, alle admin regno se il campo è uguale AdminRegno è = 1, la stessa regola vale per tutte le altre admin.
il problema è cercare di far comparire i menu in base ai permessi; nel file config.php mi trovo, per esempio, queste righe:
$PARAMETERS['office']['items']['text'] = 'Gestione oggetti';
$PARAMETERS['office']['items']['url'] = 'main.php?page=gestione_mercato';
$PARAMETERS['office']['items']['access_level'] = REGNOMODERATOR;
mentre nel menu uffici.php
<div class="page_body">
<?php /* Generazione automatica del menu del gioco */
foreach($PARAMETERS['office'] as $link_menu) {
if((empty($link_menu['url']) === false) && (empty($link_menu['text']) === false) && (isset($link_menu['access_level']) === true) && ($link_menu['access_level'] <= $_SESSION['permessi'])) {
echo '<div class="link_menu">';
if(empty($link_menu['image_file']) === false) {
echo '<img src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs'.$link_menu['image_file'].'" />';
}
echo '<a href="'.$link_menu['url'].'">'.gdrcd_filter('out', $link_menu['text']).'</a></div>';
}//if
}//foreach
?>
</div>
come posso far comparire la scritta gestione oggetti? nel file login ho gia dichiarato le variabili di sessioni per le admin.
$PARAMETERS['office']['items']['access_level'] = REGNOMODERATOR;
mi permette di far comparire nel menu la pagina solo se access_level è uguale a 4 [REGNOMODERATOR =4]
come potrei, senza riscrivere da zero la pagina far comparire l'admin oggetti se la $_SESSION['oggetti'] =1?
Pagine → 1 2
04/08/2021 15:56:25
Così, su due piedi, la prima soluzione che mi viene in mente è quella di creare delle definizioni per la tipologia di permessi che ti aspetti (quelli che tu hai inserito nella tabella che hai indicato) e, quindi, basare tutti i relativi controlli sulla abilitazione o meno di questi.
Provo a spiegarmi meglio.
Dapprima, creerei delle definizioni che mi facilitino l'assegnazione dei permessi alle sezioni, basate sulle relative colonne nella tabella. Una cosa del genere:
define('ADMINREGNO', 'AdminRegno');
define('ADMINVICE', 'AdminVice');
...
E poi predisporrei una funzione in functions.inc.php che mi determina se l'utente ha gli accessi o meno per una determinata operazione.
/**
* Eseguo un controllo sui permessi dell'utente, in modo da gestirne le abilitazioni
* @param string $permit : il permesso da controllare
* @return bool TRUE o FALSE in base ai permessi dell'utente
*/
function gdrcd_access_permission($permit) {
return $_SESSION['permits'][$permit] === 1;
}
L'ho fatta al volo, ma credo che possa esserti comunque utile per comprendere la finalità del metodo.
Fatto questo, non ti resta altro che inserire i permessi nella sessione dell'Utente. Qui, devi modificare login.php. Puoi inserire una cosa del genere:
$permits = gdrcd_query("SELECT AdminRegno, AdminVice, AdminMaster, AdminMestieri, AdminBacheche FROM {NOMETABELLACHEHAICREATO} WHERE Nome = '".gdrcd_filter('in', $record['nome'])."'");
$_SESSION['permits']['AdminRegno'] = $permits['AdminRegno'];
$_SESSION['permits']['AdminVice'] = $permits['AdminVice'];
$_SESSION['permits']['AdminMaster'] = $permits['AdminMaster'];
$_SESSION['permits']['AdminMestieri'] = $permits['AdminMestieri'];
$_SESSION['permits']['AdminBacheche '] = $permits['AdminBacheche '];
Questa cosa la puoi anche gestire in inserimento automatico, in modo che ogni volta che aggiungi una tipologia di permesso non devi per forza modificare anche il file login.php , lascio a te migliorarlo come meglio credi. Però, alla fine, ti ritroverai ad avere in $_SESSION i permessi dell'utente.
A quel punto, ti basterà richiamare il metodo sopra creato con la definizione che ti interessa. Tipo:
gdrcd_access_permission(ADMINREGNO);
E ti dirà se l'utente ha quel permesso, ossia se ha valorizzato a 1 nel database la colonna AdminRegno.
Ora che hai tutto pronto, non ti resta che mettere nei vari $PARAMETERS['office']['items']['access_level'] la tipologia di definizione che ti serve, tipo:
$PARAMETERS['office']['items']['access_level'] = ADMINREGNO;
e poi integrare al controllo la funzione che abbiamo appena creato.
<div class="page_body">
<?php /* Generazione automatica del menu del gioco */
foreach($PARAMETERS['office'] as $link_menu) {
if((empty($link_menu['url']) === false) && (empty($link_menu['text']) === false) && (isset($link_menu['access_level']) === true) && (gdrcd_access_permission($link_menu['access_level']) === true) ) {
echo '<div class="link_menu">';
if(empty($link_menu['image_file']) === false) {
echo '<img src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs'.$link_menu['image_file'].'" />';
}
echo '<a href="'.$link_menu['url'].'">'.gdrcd_filter('out', $link_menu['text']).'</a></div>';
}//if
}//foreach
?>
</div>
SICURAMENTE non è il modo migliore per gestire il lato dei PERMESSI, ma è sicuramente una possibile alternativa a quello presente.
04/08/2021 20:41:52 e modificato da aik il 04/08/2021 21:00:25
ecco cosa ho fatto seguendo le tue istruzioni
sul file function:
function gdrcd_access_permission($permit) {
return $_SESSION['permits'][$permit] === 1;
}
sul file login:
$permits = gdrcd_query("SELECT * FROM admin WHERE player = '".gdrcd_filter('in', $login1)."'");
$_SESSION['permits']['governatore'] = $permits['governatore'];
$_SESSION['permits']['vicegovernatore'] = $permits['vicegovernatore'];
$_SESSION['permits']['accademia'] = $permits['accademia'];
$_SESSION['permits']['master'] = $permits['master'];
$_SESSION['permits']['razza'] = $permits['razza'];
$_SESSION['permits']['bacheche'] = $permits['bacheche'];
$_SESSION['permits']['oggetti'] = $permits['oggetti'];
$_SESSION['permits']['mestieri'] = $permits['mestieri'];
sul file constat_value
define('ADMINGOVERNATORE', 'governatore');
define('ADMINVICEGOVERNATORE', 'vicegovernatore');
define('ADMINACCADEMIA', 'accademia');
define('ADMINMASTER', 'master');
define('ADMINRAZZA', 'razza');
define('ADMINBACHECHE', 'bacheche');
define('ADMINOGGETTI', 'oggetti');
define('ADMINMASTIERI', 'mestieri');
sul file config esempio di menu:
$PARAMETERS['office']['items']['text'] = 'Admin oggetti';
$PARAMETERS['office']['items']['url'] = 'main.php?page=gestione_oggetti';
$PARAMETERS['office']['items']['access_level'] = ADMINOGGETTI;
sul file uffici
<?php /* Generazione automatica del menu del gioco */
echo $_SESSION['permits']['governatore'];
echo $_SESSION['permits']['oggetti'];
foreach($PARAMETERS['office'] as $link_menu) {
if((empty($link_menu['url']) === false) && (empty($link_menu['text']) === false) && (isset($link_menu['access_level']) === true) && (gdrcd_access_permission($link_menu['access_level']) === true) ) {
echo '<div class="link_menu">';
if(empty($link_menu['image_file']) === false) {
echo '<img src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs'.$link_menu['image_file'].'" />';
}
echo '<a href="'.$link_menu['url'].'">'.gdrcd_filter('out', $link_menu['text']).'</a></div>';
}//if
}//foreach
?>
purtroppo non compare la voce admin oggetti, come vedi ho provato anche ha stampare le variabili di sessioni
echo $_SESSION['permits']['governatore'];
echo $_SESSION['permits']['oggetti'];
e restituiscono i valori 1 correttamente, purtroppo non compare la voce, come posso procedere?
04/08/2021 21:08:37 e modificato da aik il 04/08/2021 21:09:28
rileggendo la funzione
function gdrcd_access_permission($permit) {
return $_SESSION['permits'][$permit] === 1;
}
richiama $permit ma questa variabile non è definita quella della query è $permits giusto?
non capisco come funzioni nel dettaglio function gdrcd_access_permission
le variabili di sessione sono corrette, stampandole ho i valori 1 se ha il permesso 0 se non lo ha quindi penso il problema sia su gdrcd_access_permission
04/08/2021 21:22:12 e modificato da kasa il 04/08/2021 21:23:07
Prova a modificare il contenuto della funzione così:
return $_SESSION['permits'][$permits] == 1;
E dimmi se ora funziona.
Kasa.
04/08/2021 21:24:16
niente nn va neanche con ==1
04/08/2021 21:27:24
Se provi a stampare $_SESSION['permits'][$permits] prima del return che cosa ti da?
Kasa.
04/08/2021 21:27:40
echo (gdrcd_access_permission(ADMINOGGETTI));
ho stampato la funzione è mi restituisce 1 penso che il problema sia la condizione in uffici a questo punto
04/08/2021 21:30:19
echo (gdrcd_access_permission(ADMINOGGETTI));
foreach($PARAMETERS['office'] as $link_menu) {
if((empty($link_menu['url']) === false) && (empty($link_menu['text']) === false) && (isset($link_menu['access_level']) == true) && (gdrcd_access_permission($link_menu['access_level']) == true) ) {
echo '<div class="link_menu">';
if(empty($link_menu['image_file']) === false) {
echo '<img src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs'.$link_menu['image_file'].'" />';
}
}
}
la pagina uffici riporta 1 ma non mi fa vedere la voce admin oggetti
04/08/2021 21:33:59
Ma image_file è settato nei parametri?
Kasa.
04/08/2021 21:37:44
kasa ha scritto: Ma image_file è settato nei parametri?
Kasa.
no non era settato perche in uffici non è descritto questo parametro, ad ogni modo l'ho inserito ma nulla
ecco come è composto la voce admin oggetti nel file config:
$PARAMETERS['office']['items']['text'] = 'Admin oggetti';
$PARAMETERS['office']['items']['url'] = 'main.php?page=gestione_oggetti';
$PARAMETERS['office']['items']['access_level'] = ADMINOGGETTI;
$PARAMETERS['office']['items']['image_file'] = '';
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Storie di Agarthi ↗
World of the Sea Battle ↗
Sea of Conquest ↗
Tibia ↗
Enlisted ↗
Cafuné ↗
RAID Shadow Legends ↗
CRSED: F.O.A.D. ↗
New Orleans ↗