Gdrcd dubbio permessi legati alle corporazioni


dyrr

SCRIVI

09/08/2021 12:50:17 e modificato da dyrr il 09/08/2021 13:02:05

nel while non ti sweve l'id del proprietario della gilda la cosa dovrebbe essere un:

//inizializza l'array delle gilde dei pg
$gilde_pg =array();
//inizializza il valore dei permessi di visualizzazione impostandoli a false
$permessi = false;

//recupero degli id delle gilde del pg
$query = "SELECT
r.gilda
FROM clgpersonaggioruolo AS pr
LEFT JOIN ruolo AS r
ON pr.id_ruolo = r.id_ruolo
WHERE
pr.personaggio = '" . gdrcd_filter_in($_SESSION['login']) . "'";

$result = gdrcd_query($query,'result');

//SEL IL PG APPARTIENE LMENO AD UNA GILDA
if(gdrcd_query($result,'num_rows') != 0) {

//CICLA LE GILDE DI APPARTENENZA DEL PG
while ($record = gdrcd_query($result, 'fetch')){

//aggiunge l'id della gilda all'elenco delle gilde di appartenenza del pg
array_push($gilde_pg,$record['gilda']);

}

}

gdrcd_query($result,'free');

//SE L'ID DELLA GILDA PROPRIETARIA E' ALL'INTERNO DELL'ARRAY DELLE GILDE DEI PG
if( in_array($row['proprietari'],$gilde_pg)) {

//imposta i permessi di visualizzazione a true
$permessi = true;

}


Qui il codice è indentato e visualizzato meglio:
https://gist.github.com/Dyrr/de1181230e16eaa8b0270e6c4d1e8911

N.B.: Lo ho scritto senza poterlo testare potrebbe esserci qualche piccolo errore di sintassi ma il concetto di come funziona è quello.

Visto ch eil contorlli di appartenenza servono in più punti del forum, il mio consiglio è di rachciudere il tutto in una funzione da poter richiamare all'occorrenza:

World of TanksWorld of Tanks ↗
Lanciati in epiche battaglie spalla a spalla con altri giocatori. Conquista la supremazia nel mondo dei Carri Armati!

quota



haruka

SCRIVI

GESTORE GIOCO

09/08/2021 14:51:11 e modificato da haruka il 09/08/2021 15:20:05

No niente, come non detto.

**

Ancora grazie per tutto l'aiuto dyrr.
Sto usando gdrcd 5.5

Nella fretta prima ho dimenticato di dire con la tua query non ero riuscita e quindi sono andata a pescare qualcosa di simile dalla scheda del pg, dove in effetti vengono stampati entrambi i simboli.

L'intestazione del mio codice adesso è così:


$row = gdrcd_query("SELECT tipo, proprietari, gestione, descrtipoforum FROM araldo WHERE id_araldo = ".gdrcd_filter('num', $_REQUEST['what'])."");





$guilds = gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.id_gilda, gilda.nome AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $_SESSION['login'])."'", 'result');

while($row_guilds = gdrcd_query($guilds, 'fetch')) {

// echo ''.$row_guilds['nome_gilda'].'';



$proprietari = $row['proprietari'];
echo $proprietari;



$gildepg = $row_guilds['id_gilda'];
$listagildepg = explode(" ",$gildepg);
echo $listagildepg;


if (in_array($proprietari, $listagildepg )) {

echo "true";
}





Poi a seguire ho:


$estraipg = gdrcd_query("SELECT * FROM personaggio WHERE nome = '".$_SESSION['login']."'");
$gestionegilda1 = $estraipg['gestionegilda1'];
$gestionegilda2 = $estraipg['gestionegilda2'];


gestionegilda1 e gestionegilda2 li ho inseriti io per i permessi di gestione della prima e della seconda gilda.

E i controlli per ora sono:



if ( ($row['gestione'] == 1 ) && ($estraipg['gestionegilda1'] == 0 && $estraipg['gestionegilda2'] == 0) ) {
{

echo '<div class="error">Errore: non puoi visualizzare questa bacheca perché non sei gestore di questa corporazione</div>';
?> <div class="link_back">


<a href="main.php?page=forum">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['forums']['link']['back']); ?>
</a>
</div>
<?php
}//Questo if controlla se il pg non ha permessi di accesso alle bacheche di gestione

}

else if ( ($row['gestione'] == 1 ) && ( (in_array($proprietari, $listagildepg )) || $_SESSION['permessi'] < MODERATOR ) ){




echo '<div class="error">Errore: non puoi visualizzare questa bacheca perché non fai parte di questa corporazione </div>';


?>


<div class="link_back">

<a href="main.php?page=forum">

<?php echo gdrcd_filter('out', $MESSAGE['interface']['forums']['link']['back']); ?>
</a>
</div>
<?php
} //Questo if controlla se si è almeno admin della land, se la bacheca è una bacheca di gestione della gilda e se si fa parte di quella gilda. Se queste condizioni non sono vere restituisce errore.




Il secondo però non va. Ed infatti mi fa accedere anche a bacheche di gestione dove il pg non dovrebbe leggere, cioè di cui non è "proprietario"
img
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu

quota


kasa

SCRIVI

MODERATORE

25/08/2021 11:37:01

Più che effettuare tutti i controlli direttamente nella stessa pagina del Forum, credo che sia più pratico (anche in una ottica futura rispetto al tuo progetto) realizzare una funzione che, passando l'id della bacheca ( o anche solo i proprietari, se è necessario ), controlli se l'utente appartiene o meno al gruppo/gruppi di appartenenza della Bacheca ( similmente a quanto aveva accennato @Dyrr stesso).

Potresti utilizzare come riferimento la funzione che ti avevo proposto in questo thread: https://www.gdr-online.com/readforum.asp?id=248837

Eventualmente puoi aggiungere anche un ulteriore parametro per controllare se l'utente possiede o meno il ruolo gestione, così come lo hai impostato tu.

Kasa.


img

GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579

quota


Discussione seguita da haruka

Pagine → 1 

Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD, Open Source, Hosting Elenco Forum

Articoli, Recensioni, Interviste e altre Risorse!

Pubblicità

Accedi o Registrati

Risorse del Portale

Pubblicità

Ultime dal Portale

Pubblicità

Articoli e altro