[GDRCD 5.4.1] permessi bacheca per un gruppo di utenti
[GDRCD 5.4.1] permessi bacheca per un gruppo di utenti postato il 02/03/2020 11:16:20 nel forum programmazione, open source e hosting
[GDRCD 5.4.1 - Altervista - Sql 5.6]
Buongiorno a tutti,
ho provato a cercare un po' nel forum ma non ho trovato una situazione simile a quella che ho bisogno di risolvere.
Per esigenze della land che sto programmando, ho creato delle classi (simili al d&d) copiando il sistema delle razze. In una di queste classi, ci sono 4 sotto gruppi che ho creato perché hanno bonus caratteristiche diversi e skills dedicate. Funziona tutto ma, arriviamo alle note dolenti: la bacheca dedicata. Ne ho creata una (funzionante, definita in constant_values come SOLOCLASSE) in cui ogni sottogruppo ha la sua sezione, ma io avrei bisogno anche che i 4 sottogruppi di una classe possano accedere a un thread comune in cui tutti e 4 i sottogruppi di una stessa classe possano interagire. Non riesco a realizzarlo perché con l'attuale sistema l'id dei proprietari corrisponde all'id della classe (che varia per ogni sottogruppo). Ho provato a fare un'aggiunta alle regole di visualizzazione/restrizione accessi nella pagina forum.inc.php (per intenderci. il punto in cui dichiara che una bacheca è visibile o accessibile soltanto dai proprietari e dai moderatori) in cui dichiaro che oltre alle regole già citate, a quella bacheca possono accedere anche tutti quei sottogruppi che hanno l'id nel range interessato (ad esempio : classe X ha 4 sotto gruppi con id da 1 a 4 e quindi ho scritto $_SESSION['id_classe']<=4 ma non mi prende minimamente in considerazione.
Qualcuno per favore può darmi una mano a capire come posso risolvere questo problema? Penso di aver sbagliato l'approccio, ma non ho idea di come uscire dall'impasse. Grazie!
Pagine → 1
02/03/2020 12:20:37 e modificato da irenes il 02/03/2020 12:30:11
Ho provato a fare un'aggiunta alle regole di visualizzazione/restrizione accessi nella pagina forum.inc.php (per intenderci. il punto in cui dichiara che una bacheca è visibile o accessibile soltanto dai proprietari e dai moderatori) in cui dichiaro che oltre alle regole già citate, a quella bacheca possono accedere anche tutti quei sottogruppi che hanno l'id nel range interessato (ad esempio : classe X ha 4 sotto gruppi con id da 1 a 4 e quindi ho scritto $_SESSION['id_classe']<=4 ma non mi prende minimamente in considerazione.
potresti riportare la query che usi per fare questa cosa?
ps: ai fini di codice, quelle che tu chiami "sottoclassi" in realtà sono delle classi vere e proprie, giusto? Hai valutato la possibilità di aggirare il problema creando una classe che si chiama con il nome delle "classe principale" e di assegnargli una bacheca? Poi a quel punto puoi assegnare (fittiziamente, lo vedresti solo tu da DB) questa classe principale ai vari pg che hanno la "sottoclasse", così che vedano la bacheca. Per far sì che succedano casini tipo pg che per ragioni varie si trovano con più classi a quel punto puoi giocare con i permessi, mettendo nel codice, quando si assegnano le classi, che è possibile darne una seconda SOLO se l'id della classe è x y z (è solo un esempio. non sapendo come è strutturato il tuo gioco parlo necessariamente in generale)
02/03/2020 12:51:13
irenes ha scritto: [quote]Ho provato a fare un'aggiunta alle regole di visualizzazione/restrizione accessi nella pagina forum.inc.php (per intenderci. il punto in cui dichiara che una bacheca è visibile o accessibile soltanto dai proprietari e dai moderatori) in cui dichiaro che oltre alle regole già citate, a quella bacheca possono accedere anche tutti quei sottogruppi che hanno l'id nel range interessato (ad esempio : classe X ha 4 sotto gruppi con id da 1 a 4 e quindi ho scritto $_SESSION['id_classe']<=4 ma non mi prende minimamente in considerazione.
potresti riportare la query che usi per fare questa cosa?
ps: ai fini di codice, quelle che tu chiami "sottoclassi" in realtà sono delle classi vere e proprie, giusto? Hai valutato la possibilità di aggirare il problema creando una classe che si chiama con il nome delle "classe principale" e di assegnargli una bacheca? Poi a quel punto puoi assegnare (fittiziamente, lo vedresti solo tu da DB) questa classe principale ai vari pg che hanno la "sottoclasse", così che vedano la bacheca. Per far sì che succedano casini tipo pg che per ragioni varie si trovano con più classi a quel punto puoi giocare con i permessi, mettendo nel codice, quando si assegnano le classi, che è possibile darne una seconda SOLO se l'id della classe è x y z (è solo un esempio. non sapendo come è strutturato il tuo gioco parlo necessariamente in generale)[/quote]
Ciao, intanto grazie per avermi risposto ! è esatto, ogni sottogruppo agisce come una classe a tutti gli effetti
Dunque, ho pensato a una soluzione come quella che mi hai proposto, l'ho anche provata a realizzare; ho creato una classe che ha il nome generico, con id 5 e ho creato una colonna supplementare nella tabella personaggio in cui inserire l'id (oltre a id_razza e id_classe) ma ho un problema: se faccio questo passaggio, i permessi in bacheca per come sono impostati di default, permettono di vedere la bacheca relativa alla macro classe ma non quelle per i singoli sottogruppi. Insomma, continuo a girarci intorno perché penso proprio mi sfugga qualcosa.
Ti copio i pezzi delle query di cui parlavo, evito di postare l'intera pagina a meno che tu lo preferisca. Grazie ancora!
Intorno a riga 50 di forum.inc.php:
if (gdrcd_query($thread, 'num_rows'))
{
$araldoData=gdrcd_query($thread,'fetch');
if(($araldoData['tipo']==SOLORAZZA and ($_SESSION['id_razza']==$araldoData['proprietari'] || || $_SESSION['id_classe']<=4 || $_SESSION['permessi']>=MODERATOR)) ||
($araldoData['tipo']==SOLOCLASSE and ($_SESSION['id_classe']==$araldoData['proprietari'] || $_SESSION['permessi']>=MODERATOR)) ||
($araldoData['tipo']==SOLOZUI and ($_SESSION['id_classe']==$araldoData['proprietari'] || $_SESSION['permessi']>=MODERATOR)) ||
($araldoData['tipo']==SOLOGILDA and (strpos($_SESSION['gilda'],'*'.$araldoData['proprietari'].'*')!==FALSE || $_SESSION['permessi']>=MODERATOR)) ||
($araldoData['tipo']>=SOLOMASTERS and $_SESSION['permessi']>=GAMEMASTER) ||
($araldoData['tipo']>=SOLOMODERATORS and $_SESSION['permessi']>=MODERATOR) ||
// ($araldoData['tipo']==SOLOADMIN and $_SESSION['permessi']==SUPERUSER) ||
($araldoData['tipo']==PERTUTTI) || ($araldoData['tipo']==INGIOCO) || //Controllo Accesso al thread
$_POST['padre']==-1 or ($araldoData['chiuso']!=1 || $_SESSION['permessi']>=MODERATOR))
Intorno a riga 411
if($_REQUEST['op']=='read')
{
$result = gdrcd_query("SELECT messaggioaraldo.id_messaggio, messaggioaraldo.id_messaggio_padre, messaggioaraldo.titolo, messaggioaraldo.messaggio, messaggioaraldo.autore, messaggioaraldo.data_messaggio, messaggioaraldo.chiuso, araldo.tipo, araldo.nome, araldo.proprietari, personaggio.url_img_chat, araldo.id_araldo FROM messaggioaraldo LEFT JOIN araldo ON messaggioaraldo.id_araldo = araldo.id_araldo LEFT JOIN personaggio ON messaggioaraldo.autore = personaggio.nome WHERE (messaggioaraldo.id_messaggio_padre = ".gdrcd_filter('num',$_REQUEST['what'])." AND messaggioaraldo.id_messaggio_padre != -1) OR messaggioaraldo.id_messaggio = ".gdrcd_filter('num',$_REQUEST['what'])." ORDER BY id_messaggio_padre, data_messaggio", 'result');
$row = gdrcd_query($result, 'fetch');
if(!empty($row))
{
$araldo=(int)$row['id_araldo'];
$chiuso = $row['chiuso'];
/*Restrizione di accesso i forum admin e master*/
if ((($row['tipo']==SOLORAZZA)&&($_SESSION['id_razza']!=$row['proprietari'])&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']==SOLOCLASSE)&&($_SESSION['id_classe']!=$row['proprietari'])&&($_SESSION['id_classe']>=4)&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']==SOLOZUI)&&($_SESSION['id_classe']!=$row['proprietari'])&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']==SOLOGILDA)&&(strpos($_SESSION['gilda'],'*'.$row['proprietari'].'*')===FALSE)&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']>=SOLOMASTERS)&&($_SESSION['permessi']<GAMEMASTER))||
(($row['tipo']>=SOLOMODERATORS)&&($_SESSION['permessi']<MODERATOR)))
{
echo '<div class="error">'.gdrcd_filter('out',$MESSAGE['error']['not_allowed']).'</div>';
}
else
{
//Inserimento il record al pg come thread letto
$check_letto = gdrcd_query("SELECT * FROM araldo_letto WHERE nome = '".$_SESSION['login']."' AND thread_id = ".gdrcd_filter('num',$_REQUEST['what']));
if ($check_letto['id'] <= 0)
{
gdrcd_query("INSERT INTO araldo_letto (nome, araldo_id, thread_id) VALUES ('".$_SESSION['login']."', ".gdrcd_filter('num',$_REQUEST['where']).", ".gdrcd_filter('num',$_REQUEST['what']).")");
}
?>
Intorno a riga 685
<?php while($row = gdrcd_query($result, 'fetch'))
if (($row['tipo']<=PERTUTTI)||
(($row['tipo']==SOLORAZZA)&&($_SESSION['id_razza']==$row['proprietari']))||
(($row['tipo']==SOLOCLASSE)&&($_SESSION['id_classe']==$row['proprietari'])&&($_SESSION['id_classe']<=4))||
(($row['tipo']==SOLOZUI)&&($_SESSION['id_classe']==$row['proprietari']))||
(($row['tipo']==SOLOGILDA)&&(strpos($_SESSION['gilda'],'*'.$row['proprietari'].'*')!=FALSE))||
(($row['tipo']==SOLOMASTERS)&&($_SESSION['permessi']>=GAMEMASTER))||
(($_SESSION['permessi']>=MODERATOR) && ($row['tipo']<SOLOADMIN))||
(($row['tipo']==SOLOADMIN)&&($_SESSION['permessi']==SUPERUSER))){ /*Restrizione di visualizzazione solo master e admin*/
{
if($row['tipo']!=$ultimotipo){/*Sono ordinati per tipo, se cambia stampo il nuovo tipo come capoverso*/
$ultimotipo=$row['tipo']; ?>
E infine intorno alla riga 761:
<?php /*Visualizzazione dei topic */
if(gdrcd_filter('get',$_REQUEST['op'])=='visit')
{
//Permessi
$row=gdrcd_query("SELECT tipo, proprietari FROM araldo WHERE id_araldo = ".gdrcd_filter('num',$_REQUEST['what'])."");
if ((($row['tipo']==SOLORAZZA)&&($_SESSION['id_razza']!=$row['proprietari'])&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']==SOLOCLASSE)&&($_SESSION['id_classe']!=$row['proprietari'])&&($_SESSION['id_classe']>=5)&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']==SOLOZUI)&&($_SESSION['id_classe']!=$row['proprietari'])&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']==SOLOGILDA)&&(strpos($_SESSION['gilda'],'*'.$row['proprietari'].'*')===FALSE)&&($_SESSION['permessi']<MODERATOR))||
(($row['tipo']>=SOLOMASTERS)&&($_SESSION['permessi']<GAMEMASTER))||
(($row['tipo']>=SOLOMODERATORS)&&($_SESSION['permessi']<MODERATOR))||(($row['tipo']>=SOLOADMIN)&&($_SESSION['permessi']<SUPERUSER)))
{
/*Restrizione di visualizzazione solo master e admin*/
echo '<div class="error">'.gdrcd_filter('out',$MESSAGE['error']['not_allowed']).'</div>';
?>
02/03/2020 14:12:56
mi è venuto in mente una cosa. non riflettevo che a livello di codice non è possibile che ogni pg abbia più di una razza, mentre invece può avere più di una gilda.
Ergo.... e se giocassi con le gilde e l'id_gilda? imposti dove bisogna farlo come limite massimo di appartenenza per i pg 2 gilde, SOLO a condizione però che la seconda "gilda" sia questa classe generica.
in teoria, così facendo un pg che ha quella classe e quella sottoclasse vede entrambe le bacheche.
Occhio che, così facendo, a livello di DB le tue classi sono come gilde, però. Se la cosa non ti crea problemi sembra la soluzione più ottimale
02/03/2020 14:15:56
irenes ha scritto: mi è venuto in mente una cosa. non riflettevo che a livello di codice non è possibile che ogni pg abbia più di una razza, mentre invece può avere più di una gilda.
Ergo.... e se giocassi con le gilde e l'id_gilda? imposti dove bisogna farlo come limite massimo di appartenenza per i pg 2 gilde, SOLO a condizione però che la seconda "gilda" sia questa classe generica.
in teoria, così facendo un pg che ha quella classe e quella sottoclasse vede entrambe le bacheche.
Occhio che, così facendo, a livello di DB le tue classi sono come gilde, però. Se la cosa non ti crea problemi sembra la soluzione più ottimale
Ci avevo pensato, però mi crea problemi perché non riesco a assegnare le skills a una gilda e queste classi sono le uniche in tutto il gioco a avere determinate skills. :(
02/03/2020 18:26:12
sempre per suggerire soluzioni "easy" prima di buttarsi nel codice: hai pensato alla possibilità di aggiungere un livello di permesso sopra lo user ma sotto il capogruppo, da dare solo ai membri di quella classes/sottoclassi, con la possibilità poi, quindi, di assegnargli una bacheca sulla base di questa logica? A questi punti poi ti basterebbe sistemare il css e le opzioni di visualizzazione!
02/03/2020 20:50:46
irenes ha scritto: sempre per suggerire soluzioni "easy" prima di buttarsi nel codice: hai pensato alla possibilità di aggiungere un livello di permesso sopra lo user ma sotto il capogruppo, da dare solo ai membri di quella classes/sottoclassi, con la possibilità poi, quindi, di assegnargli una bacheca sulla base di questa logica? A questi punti poi ti basterebbe sistemare il css e le opzioni di visualizzazione!
No, non ci avevo pensato! grazie! provo così poi ti aggiorno!
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tibia ↗
Project Entropy ↗
Neverness to Everness ↗
World of Tanks ↗
World of Warship ↗