Gestione Utente - vedere solo i propri contenuti

Buonasera a tutti!

Sono nuovo di Yii2 quindi chiedo a chi è più esperto se può darmi una mano.

Sto realizzando un piccolo gestionale dove all’interno dovrò gestire 3 livelli utenti:

1_lv supervisore

2_lv manager

3_lv utente

Ho visto come gestire tramite RBAC gli accessi e fino a qui nessun problema.

Quello che mi servirebbe è fare in modo che l’utente (lv_3) facendo il login, veda soltanto i propri contenuti (ad es. nella lista CURD), quindi diciamo che sarebbe da recuperare l’id utente della sessione (ho visto che c’è la funzione Yii::$app->user->getId(); ma non ho ben capito come usarle) e di conseguenza che vengano visualizzati soltanto i dati che l’utente ha inserito confrontando il valore del campo “user_id” all’interno della tabella “Articoli” (che ovviamente ha un riferimento utente in relazione).

Secondo step, sarebbe quello di fare in modo che il manager (2_lv) associato ad uno o più utenti di 3° lv possa visualizzare solo gli articoli di tutti gli utenti che gli sono stati assegnati, senza potere vedere un’eventuale “linea” legata ad un altro manager

L’utente supervisore invece può vedere tutto, ma questo mi sembra abbastanza facile in quanto basta non limitarlo.

Qualcuno può darmi una mano?

Ho visto sul forum che c’è qualche articolo sulla “gerarchia utenti” ma più che un discorso di accessi avrei bisogno di una limitazione di visualizzazione sulle pagine comuni.

Ringrazio anticipatamente

Inizio a rispondermi…

Ho trovato il sistema per visualizzare solo i contenuti dell’utente in base al login.

Praticamente ho aggiunto nel mio model OrdiniSearch.php una condizione Where alla query generata tramite gii

$query = Ordini::find()->where([‘cdr_id’ => Yii::$app->user->id]);

Adesso mi servirebbe trovare una logica comoda per fare in modo che l’utente di livello superiore (2_lv manager) possa vedere tutti i contenuti di chi ha sotto, quindi una sorta di query piramidale (scusate il linguaggio non propriamente tecnico) dove il suo id “contenga” gli id di tutti quelli che ha sotto di lui

Facendo una condizione senza linguaggio:

Se al login "cdr_id = Manager A"

allora può vedere i contenuti degli utenti 1, 2 e 3 (appartenenti alla sua linea)

come se il WHERE fosse "crd_id = 1 AND crd_id = 2 AND crd_id = 3"

Stesso principio per i livelli superiori

Perdonate l’esempio poco tecnico ma spero di aver spiegato bene il concetto.

Qualche idea?

Grazie!

Ciao a tutti!

Alla fine ho risolto andando ad inserire negli “ordini” i riferimenti dei superiori di chi effettua l’accesso, di conseguenza oltre ad avere lid dell’utente che ha effettuato l’ordine ci sono anche quelli degli eventuali superiori, quindi facendo un filtro al login e identificando il “ruolo” la mia query di visualizzazione della lista filtrerà un campo differente della tabella, in esempio pratico:

Se fa l’accesso l’utente, la query mette un where sull’id utente presente nella tabella ordini

Se fa l’accesso un manager, la query mette un where sull’id manager presente nella tabella ordini

Sembra funzionare a dovere, o almeno ho risolto per quello che mi serviva

Ciao!