The Elearning Community • Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati
Page 1 of 2

Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Thu Feb 01, 2018 1:52 pm
by barlasd
Dopo aver creato un profilo amministratore e averlo assegnato ad un Utente amministratore mi sono accorto che nonostante l'assegnazione di Gruppi di utenti specifici, l'admin ha comunque accesso a tutti i gruppi disponibili dalla Gestione gruppi.
E' molto grave perché, se gli vengono abilitati i permessi, l'admin in questione può rimuovere o modificare gruppi e aggiungere utenti a gruppi non a lui assegnati.

La stessa situazione si propone anche durante la sottoscrizione di un Gruppo di utenti ad un corso . In questo caso nonostante appaiano tutti i gruppi disponibili (anche quelli non assegnati all'amministratore) la sottoscrizione del gruppo scelto (all'infuori di quelli assegnati) non va a buon fine e appare un messaggio di errore che riporta "Selezione vuota".

Studiando un po' il codice (per capire quale funzione si occupasse di mostrare i gruppi) sono riuscito a trovare una soluzione per evitare che amministratori "non autorizzati" possano visualizzare e agire su gruppi non a loro assegnati.

Il file da modificare è il seguente appCore/models/GroupmanagementAdm.php

E' necessario sostituire le righe che vanno dalla 63 alla 65 con la seguente porzione di codice:

Code: Select all

$idstLogged = Docebo::user()->getIdSt();
		$user_level = Docebo::user()->getUserLevelId();
		
		if ($user_level == ADMIN_GROUP_ADMIN){
			$query = "SELECT g.idst, g.groupid, g.description, COUNT(*) as usercount "
				." FROM %adm_group as g LEFT JOIN (%adm_group_members AS gm ) ON (gm.idst = g.idst) "
				." LEFT JOIN %adm_admin_tree AS tree ON (g.idst=tree.idst) "
				." WHERE tree.idstAdmin='".$idstLogged."' AND g.hidden = 'false' ".($learning_filter === 'none' ? "AND g.type <> 'course' " : '');
		}
		else{
			$query = "SELECT g.idst, g.groupid, g.description, COUNT(*) as usercount "
				." FROM %adm_group as g LEFT JOIN (%adm_group_members AS gm ) ON (gm.idst = g.idst) "
				." WHERE g.hidden = 'false' ".($learning_filter === 'none' ? "AND g.type <> 'course' " : '');
		}

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Thu Feb 01, 2018 4:32 pm
by alfa24
$user_level e $idstLogged le devi definire però... In teoria sarebbe più pulito utilizzare lib.preference.php:

Code: Select all

$query = "SELECT g.idst, g.groupid, g.description, COUNT(*) as usercount "
			." FROM %adm_group as g LEFT JOIN (%adm_group_members AS gm ) ON (gm.idst = g.idst) "
			." WHERE g.hidden = 'false' ".($learning_filter === 'none' ? "AND g.type <> 'course' " : '');
			
$ulevel = Docebo::user()->getUserLevelId();
if ($ulevel != ADMIN_GROUP_GODADMIN) {
				require_once(_base_.'/lib/lib.preference.php');
				$adminManager = new AdminPreference();
				$admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
				$query .= " AND g.idst IN (".implode(",", $admin_tree).") ";
			}
Dimmi se funziona;)

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Thu Feb 01, 2018 4:53 pm
by barlasd
alfa24 wrote:$user_level e $idstLogged le devi definire però... In teoria sarebbe più pulito utilizzare lib.preference.php:

Code: Select all

$query = "SELECT g.idst, g.groupid, g.description, COUNT(*) as usercount "
			." FROM %adm_group as g LEFT JOIN (%adm_group_members AS gm ) ON (gm.idst = g.idst) "
			." WHERE g.hidden = 'false' ".($learning_filter === 'none' ? "AND g.type <> 'course' " : '');
			
$ulevel = Docebo::user()->getUserLevelId();
if ($ulevel != ADMIN_GROUP_GODADMIN) {
				require_once(_base_.'/lib/lib.preference.php');
				$adminManager = new AdminPreference();
				$admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
				$query .= " AND g.idst IN (".implode(",", $admin_tree).") ";
			}
Dimmi se funziona;)
Non sapevo ci fosse già una funzione dedicata al recupero dei gruppi associati agli admin, ma ci sto giocando solo da qualche giorno e non ho avuto tempo di approfondire proprio tutto :)
E' sicuramente più pulito da vedere il tuo codice, però teoricamente dovrebbe essere meno performante in quanto in quel modo sei costretto ad eseguire due query quando con una LEFT JOIN puoi fare tutto in un'unica query.

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Sat Feb 03, 2018 10:45 am
by alfa24
in generale una left non è più performante, ma se tenti una explain delle due query, ti renderai conto che in questo caso (come in molti altri su forma) una left è criticamente più lenta

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Mon May 07, 2018 3:27 pm
by AF24
alfa24 wrote:
Thu Feb 01, 2018 4:32 pm
$user_level e $idstLogged le devi definire però... In teoria sarebbe più pulito utilizzare lib.preference.php:

Code: Select all

$query = "SELECT g.idst, g.groupid, g.description, COUNT(*) as usercount "
			." FROM %adm_group as g LEFT JOIN (%adm_group_members AS gm ) ON (gm.idst = g.idst) "
			." WHERE g.hidden = 'false' ".($learning_filter === 'none' ? "AND g.type <> 'course' " : '');
			
$ulevel = Docebo::user()->getUserLevelId();
if ($ulevel != ADMIN_GROUP_GODADMIN) {
				require_once(_base_.'/lib/lib.preference.php');
				$adminManager = new AdminPreference();
				$admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
				$query .= " AND g.idst IN (".implode(",", $admin_tree).") ";
			}
Dimmi se funziona;)
quindi sarebbe piu corretto utilizzare questo codice su su lib.preference.php?
basterebbe solo copiare ed incollare o bisogna sostituire le righe? se si potete specificare quali?

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Mon May 07, 2018 3:42 pm
by alfa24
No. Devi usare il mio codice al posto di quello di barlasd, righe 63-65 di appCore/models/GroupmanagementAdm.php

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Fri Jun 29, 2018 5:10 pm
by AF24
nella versione 2.0 questo problema viene risolto. Rimane invece il problema sulla statistica del corso, un amministratore quale anche tutor o docente vede tutti i corsisti, sarebbe piu corretto, per questioni di privacy, che il tutor/docente assegnato ad un nodo gestisse solo quegli studenti.

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Fri Jun 29, 2018 6:53 pm
by alfa24
un tutor/docente non è necessariamente un admin della piattaforma, per cui non puoi assegnargli un nodo da amministrare
gli stai dando il corso, con tutti i suoi utenti
probabilmente la tua necessità si risolve con le edizioni

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Mon Jul 02, 2018 10:14 am
by AF24
Grazie per la risposta però aprire tutti i mesi le edizioni dei corsi, per vari clienti/docenti ecc... risulta essere molto macchinoso.... Penso sia piu appropriato, rispettando anche il GDPR, assegnare ad ogni docente il suo corsista....
alfa24 wrote:
Fri Jun 29, 2018 6:53 pm
un tutor/docente non è necessariamente un admin della piattaforma, per cui non puoi assegnargli un nodo da amministrare
gli stai dando il corso, con tutti i suoi utenti
probabilmente la tua necessità si risolve con le edizioni

Re: Mostrare agli Amministratori solo i gruppi che gli sono stati assegnati

Posted: Tue Jul 03, 2018 9:59 am
by alberto
A rigor di logica un corso dovrebbe avere un docente, o al limite più docenti per temi diversi trattati nel corso: questi utenti sono docenti per tutti gli studenti del corso, ed è corretto che li vedano tutti. Questo è il caso più comune, e il docente può essere un normale "user".

In organizzazioni più articolate potresti avere dei tutor o dei supervisori che si occupano solo di un certo stabilimento o dipartimento, e quindi devono vedere solo gli studenti di loro competenza: a questi utenti darai livello e permessi da "admin", in modo che possano vedere solo i propri utenti anche all'interno dei corsi.

NB: con forma 2, su alcune voci di menu (es. le statistiche) è stato introdotto un nuovo permesso "view_all" che consente agli admin di vedere tutti gli utenti. Togliendo questo permesso vedranno solo i propri utenti

This site uses cookies.

Some of the cookies we use are essential for parts of the site to operate and have already been set. We also use Google Analytics scripts, which all use cookies.
You may delete or block all cookies from this site in your browser options.