Skip to content

Commit

Permalink
Nouveau : Gestion des accès restreint via les groupes
Browse files Browse the repository at this point in the history
  • Loading branch information
JeromeDevome committed Dec 16, 2024
1 parent 839a009 commit 0204964
Show file tree
Hide file tree
Showing 11 changed files with 220 additions and 49 deletions.
100 changes: 80 additions & 20 deletions admin/controleurs/admin_access_area.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@
if (!isset($id_area))
settype($id_area,"integer");
$reg_user_login = isset($_POST["reg_user_login"]) ? $_POST["reg_user_login"] : NULL;
$reg_groupe = isset($_POST["reg_groupe"]) ? $_POST["reg_groupe"] : NULL;
$reg_multi_user_login = isset($_POST["reg_multi_user_login"]) ? $_POST["reg_multi_user_login"] : NULL;
$test_user = isset($_POST["reg_multi_user_login"]) ? "multi" : (isset($_POST["reg_user_login"]) ? "simple" : NULL);
$action = isset($_GET["action"]) ? $_GET["action"] : NULL;
if($action == NULL)
$action = isset($_POST["action"]) ? $_POST["action"] : NULL;
$msg = '';

check_access(4, $back);

// Si la table j_user_area est vide, il faut modifier la requête
$test_grr_j_user_area = grr_sql_count(grr_sql_query("SELECT * from ".TABLE_PREFIX."_j_user_area"));

if ($test_user == "multi")
{
foreach ($reg_multi_user_login as $valeur)
{
// On commence par vérifier que le professeur n'est pas déjà présent dans cette liste.
// On commence par vérifier que l'utilisateur n'est pas déjà présent dans cette liste.
if ($id_area != -1)
{
if (authGetUserLevel(getUserName(), $id_area, 'area') < 4)
Expand Down Expand Up @@ -67,7 +67,7 @@

if ($test_user == "simple")
{
// On commence par vérifier que le professeur n'est pas déjà présent dans cette liste.
// On commence par vérifier que l'utilisateur n'est pas déjà présent dans cette liste.
if ($id_area != -1)
{
if (authGetUserLevel(getUserName(), $id_area, 'area') < 4)
Expand All @@ -94,6 +94,37 @@
}
}

if ($action == "add_groupe")
{
// On commence par vérifier que le groupe n'est pas déjà présent dans cette liste.
if ($id_area != -1)
{
if (authGetUserLevel(getUserName(), $id_area, 'area') < 4)
{
showAccessDenied($back);
exit();
}
$sql = "SELECT * FROM ".TABLE_PREFIX."_j_group_area WHERE (idgroupes = '$reg_groupe' and id_area = '$id_area')";
$res = grr_sql_query($sql);
$test = grr_sql_count($res);
if ($test > 0)
$msg = get_vocab("warning_exist");
else
{
if ($reg_groupe != '')
{
$sql = "INSERT INTO ".TABLE_PREFIX."_j_group_area SET idgroupes= '$reg_groupe', id_area = '$id_area'";
if (grr_sql_command($sql) < 0)
fatal_error(1, "<p>" . grr_sql_error());
else
$msg = get_vocab("add_user_succeed");

synchro_groupe($reg_groupe, 1);
}
}
}
}

if ($action=='del_user')
{
if (authGetUserLevel(getUserName(), $id_area, 'area') < 4)
Expand All @@ -108,28 +139,39 @@
fatal_error(1, "<p>" . grr_sql_error());
else
$msg = get_vocab("del_user_succeed");

} elseif ($action=='del_groupe')
{
if (authGetUserLevel(getUserName(), $id_area, 'area') < 4)
{
showAccessDenied($back);
exit();
}
unset($login_user);
$groupe = $_GET["groupe"];
$sql = "DELETE FROM ".TABLE_PREFIX."_j_group_area WHERE (idgroupes='$groupe' and id_area = '$id_area')";
if (grr_sql_command($sql) < 0)
fatal_error(1, "<p>" . grr_sql_error());
else
$msg = get_vocab("del_user_succeed");

synchro_groupe($groupe, 1);
}

if (empty($id_area))
$id_area = -1;


get_vocab_admin('admin_access_area');
get_vocab_admin('areas');
get_vocab_admin('select');
get_vocab_admin('add_user_to_list');
get_vocab_admin('user_area_list');
get_vocab_admin('add_multiple_user_to_list');

get_vocab_admin('add');

$trad['dIdDomaine'] = $id_area;
$trad = $vocab;
$d['idDomaine'] = $id_area;

affiche_pop_up($msg,"admin");

$this_area_name = "";
$utilisateursExep = array ();
$utilisateursAjoutable = array ();
$groupesExep = array();
$groupesAjoutable = array();
$domaines = array ();

# Show all areas
Expand All @@ -155,6 +197,7 @@
if ($id_area != -1)
{

// Utilisateurs ayant accès au domaine restreint
$sql = "SELECT u.login, u.nom, u.prenom FROM ".TABLE_PREFIX."_utilisateurs u, ".TABLE_PREFIX."_j_user_area j WHERE (j.id_area='$id_area' and u.login=j.login) order by u.nom, u.prenom";
$res = grr_sql_query($sql);
$nombre = grr_sql_count($res);
Expand All @@ -165,17 +208,34 @@
$utilisateursExep[] = array('login' => $row2[0], 'nom' => $row2[1], 'prenom' => $row2[2]);
}

// Pour mysql >= 4.1
// Utilisateurs pouvant être ajouté
$sql = "SELECT login, nom, prenom FROM ".TABLE_PREFIX."_utilisateurs WHERE (etat!='inactif' and (statut='utilisateur' or statut='visiteur' or statut='gestionnaire_utilisateur')) AND login NOT IN (SELECT login FROM ".TABLE_PREFIX."_j_user_area WHERE id_area = '$id_area') order by nom, prenom";
// Pour mysql < 4.1
//$sql = "SELECT DISTINCT u.login, u.nom, u.prenom FROM ".TABLE_PREFIX."_utilisateurs u left join ".TABLE_PREFIX."_j_user_area on ".TABLE_PREFIX."_j_user_area.login=u.login WHERE ((etat!='inactif' and (statut='utilisateur' or statut='visiteur' or statut='gestionnaire_utilisateur')) AND (".TABLE_PREFIX."_j_user_area.login is null or (".TABLE_PREFIX."_j_user_area.login=u.login and ".TABLE_PREFIX."_j_user_area.id_area!=".$id_area."))) order by u.nom, u.prenom";
$res = grr_sql_query($sql);
$trad['dNbUserAjoutable'] = grr_sql_count($res);
$d['nbUserAjoutable'] = grr_sql_count($res);
if ($res)
for ($i = 0; ($row3 = grr_sql_row($res, $i)); $i++)
$utilisateursAjoutable[] = array('login' => $row3[0], 'nom' => $row3[1], 'prenom' => $row3[2]);

// Groupes ayant accès au domaine restreint
$sql = "SELECT g.idgroupes, g.nom FROM ".TABLE_PREFIX."_groupes g, ".TABLE_PREFIX."_j_group_area j WHERE (j.id_area='$id_area' and g.idgroupes=j.idgroupes) order by g.nom";
$res = grr_sql_query($sql);
$nombre = grr_sql_count($res);

if ($res)
for ($i = 0; ($row2 = grr_sql_row($res, $i)); $i++)
{
$groupesExep[] = array('id' => $row2[0], 'nom' => $row2[1]);
}

// Groupes pouvant être ajouté
$sql = "SELECT idgroupes, nom FROM ".TABLE_PREFIX."_groupes WHERE archive = 0 AND idgroupes NOT IN (SELECT idgroupes FROM ".TABLE_PREFIX."_j_group_area WHERE id_area = '$id_area') order by nom";
$res = grr_sql_query($sql);
$d['nbUserAjoutable'] = grr_sql_count($res);
if ($res)
for ($i = 0; ($row3 = grr_sql_row($res, $i)); $i++)
$groupesAjoutable[] = array('id' => $row3[0], 'nom' => $row3[1]);

}

echo $twig->render('admin_access_area.twig', array('liensMenu' => $menuAdminT, 'liensMenuN2' => $menuAdminTN2, 'd' => $d, 'trad' => $trad, 'settings' => $AllSettings, 'domaines' => $domaines, 'utilisateursexep' => $utilisateursExep, 'utilisateursajoutable' => $utilisateursAjoutable));
echo $twig->render('admin_access_area.twig', array('liensMenu' => $menuAdminT, 'liensMenuN2' => $menuAdminTN2, 'd' => $d, 'trad' => $trad, 'settings' => $AllSettings, 'domaines' => $domaines, 'utilisateursexep' => $utilisateursExep, 'groupesexep' => $groupesExep, 'utilisateursajoutable' => $utilisateursAjoutable, 'groupesajoutable' => $groupesAjoutable));
?>
4 changes: 4 additions & 0 deletions admin/controleurs/admin_edit_domaine.php
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,10 @@
$sql = "DELETE FROM ".TABLE_PREFIX."_j_user_area WHERE id_area='$id_area'";
if (grr_sql_command($sql) < 0)
fatal_error(0, get_vocab('update_area_failed') . grr_sql_error());

$sql = "DELETE FROM ".TABLE_PREFIX."_j_group_area WHERE id_area='$id_area'";
if (grr_sql_command($sql) < 0)
fatal_error(0, get_vocab('update_area_failed') . grr_sql_error());
}
if ((isset($change_done)) && (!isset($ok)))
{
Expand Down
9 changes: 9 additions & 0 deletions admin/controleurs/admin_groupe.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@
$msg=get_vocab("del_user_succeed");
}
}
// Synchro Groupe
if (isset($_GET['groupe_sync']))
{
$id = $_GET['groupe_sync'];
synchro_groupe($id, 0);
}



if (isset($mess) and ($mess != ""))
echo "<p>".$mess."</p>";

Expand Down
1 change: 1 addition & 0 deletions admin/controleurs/admin_room_del.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@
grr_sql_command("DELETE FROM ".TABLE_PREFIX."_j_type_area WHERE id_area=$id_area");
grr_sql_command("DELETE FROM ".TABLE_PREFIX."_j_user_area WHERE id_area=$id_area");
grr_sql_command("DELETE FROM ".TABLE_PREFIX."_j_site_area WHERE id_area=$id_area");
grr_sql_command("DELETE FROM ".TABLE_PREFIX."_j_group_area WHERE id_area=$id_area");
$test = grr_sql_query1("select VALUE from ".TABLE_PREFIX."_setting WHERE NAME='default_area'");
if ($test == $id_area)
{
Expand Down
18 changes: 15 additions & 3 deletions admin/controleurs/admin_user_modify.php
Original file line number Diff line number Diff line change
Expand Up @@ -328,10 +328,21 @@
fatal_error(0, get_vocab('message_records_error') . grr_sql_error());
}
// Groupes
$sql = "DELETE FROM ".TABLE_PREFIX."_utilisateurs_groupes WHERE login='$user_login'";
if (grr_sql_command($sql) < 0)
fatal_error(0, get_vocab('message_records_error') . grr_sql_error());
//Supression
$sql = "SELECT idgroupes FROM ".TABLE_PREFIX."_utilisateurs_groupes WHERE login='$user_login'";
$res = grr_sql_query($sql);
if ($res)
{
for ($i = 0; ($row = grr_sql_row($res, $i)); $i++)
{
$sql = "DELETE FROM ".TABLE_PREFIX."_utilisateurs_groupes WHERE login='$user_login'";
if (grr_sql_command($sql) < 0)
fatal_error(0, get_vocab('message_records_error') . grr_sql_error());

synchro_groupe($row[0], 0);
}
}
// Insertion
if(isset($groupes_select) && !empty($groupes_select)){
foreach ($groupes_select as $valeur)
{
Expand All @@ -340,6 +351,7 @@
$sql = "INSERT INTO ".TABLE_PREFIX."_utilisateurs_groupes SET login= '$user_login', idgroupes = '$valeur'";
if (grr_sql_command($sql) < 0)
fatal_error(1, "<p>" . grr_sql_error());
synchro_groupe($valeur, 0);
}
}
}
Expand Down
96 changes: 71 additions & 25 deletions admin/templates/admin_access_area.twig
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<select name="area" class="form-control" onchange="area_go()">
<option value="-1">{{ trad.select }}</option>
{% for domaine in domaines %}
<option value="{{ domaine.id }}" {% if domaine.id == trad.dIdDomaine %} selected {% endif %}>{{ domaine.nom }}</option>
<option value="{{ domaine.id }}" {% if domaine.id == d.idDomaine %} selected {% endif %}>{{ domaine.nom }}</option>
{% endfor %}
</select>
</div>
Expand All @@ -35,34 +35,63 @@

<hr>

{% if trad.dIdDomaine > 0 %}

<form action="?p=admin_access_area" method="post">
<input type="hidden" name="p" value="admin_access_area" />
<input type="hidden" name="id_area" value="{{ trad.dIdDomaine }}" />

<div class="form-group">
<label class="col col-sm-3" for="reg_user_login">{{ trad.add_user_to_list }}</label>
<div class="col col-sm-9">
<select name="reg_user_login" class="form-control">
<option value="">{{ trad.select }}</option>
{% for user in utilisateursajoutable %}
<option value="{{ user.login }}">{{ user.nom }} {{ user.prenom }}</option>
{% endfor %}
</select>
</div>
</div>
{% if d.idDomaine > 0 %}

<div style="text-align:center;">
<input class="btn btn-primary" type="submit" value="{{ trad.add }}" />
</div>
</form>
<div class="row">
<!-- Ajout un utilisateur -->
<div class="col col-sm-6">
<form action="?p=admin_access_area" method="post">
<input type="hidden" name="p" value="admin_access_area" />
<input type="hidden" name="id_area" value="{{ d.idDomaine }}" />

{% if trad.dNbUserAjoutable > 0 %}
<div class="form-group">
<label class="col col-sm-12" for="reg_user_login">{{ trad.add_user_to_list }}</label>
<div class="col col-sm-12">
<select name="reg_user_login" class="form-control">
<option value="">{{ trad.select }}</option>
{% for user in utilisateursajoutable %}
<option value="{{ user.login }}">{{ user.nom }} {{ user.prenom }}</option>
{% endfor %}
</select>
</div>
</div>

<div style="text-align:center;">
<input class="btn btn-primary" type="submit" value="{{ trad.add }}" />
</div>
</form>
</div>
<!-- Ajout un groupe -->
<div class="col col-sm-6">
<form action="?p=admin_access_area" method="post">
<input type="hidden" name="p" value="admin_access_area" />
<input type="hidden" name="id_area" value="{{ trad.dIdDomaine }}" />
<input type="hidden" name="id_area" value="{{ d.idDomaine }}" />
<input type="hidden" name="action" value="add_groupe" />

<div class="form-group">
<label class="col col-sm-12" for="reg_groupe">Ajouter un groupe à la liste</label>
<div class="col col-sm-12">
<select name="reg_groupe" class="form-control">
<option value="">{{ trad.select }}</option>
{% for groupe in groupesajoutable %}
<option value="{{ groupe.id }}">{{ groupe.nom }}</option>
{% endfor %}
</select>
</div>
</div>

<div style="text-align:center;">
<input class="btn btn-primary" type="submit" value="{{ trad.add }}" />
</div>
</form>
</div>
</div>
<div="row">
{% if d.nbUserAjoutable > 0 %}

<form action="?p=admin_access_area" method="post">
<input type="hidden" name="p" value="admin_access_area" />
<input type="hidden" name="id_area" value="{{ d.idDomaine }}" />
<div class="form-group">
<label class="col col-sm-3" for="agent">{{ trad.add_multiple_user_to_list }}</label>
<div class="col col-sm-9">
Expand All @@ -84,6 +113,7 @@
</form>

{% endif %}
</div>

<h3>{{ trad.user_area_list }}</h3>

Expand All @@ -99,7 +129,23 @@
<td>{{ useradmin.login }}</td>
<td>{{ useradmin.nom }}</td>
<td>{{ useradmin.prenom }}</td>
<td><a href="?p=admin_access_area&action=del_user&login_user={{ useradmin.login }}&id_area={{ trad.dIdDomaine }}"><i class="fa fa-trash"></i></a></td>
<td><a href="?p=admin_access_area&action=del_user&login_user={{ useradmin.login }}&id_area={{ d.idDomaine }}"><i class="fa fa-trash"></i></a></td>
</tr>
{% endfor %}
</table>


<h3>Liste des groupes ayant accès à ce domaine :</h3>

<table class="table table-striped">
<tr>
<th>{{ trad.groupes }}</th>
<th>{{ trad.action }}</th>
</tr>
{% for groupeadmin in groupesexep %}
<tr>
<td>{{ groupeadmin.nom }}</td>
<td><a href="?p=admin_access_area&action=del_groupe&groupe={{ groupeadmin.id }}&id_area={{ d.idDomaine }}"><i class="fa fa-trash"></i></a></td>
</tr>
{% endfor %}
</table>
Expand Down
1 change: 1 addition & 0 deletions admin/templates/admin_groupe.twig
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<td>{{groupe.3|raw}}</td>
<td>
<a href="?p=admin_groupe_edit&idgroupe={{groupe.0}}" class="btn btn-info btn-md"><i class="icon fa fa-edit"></i></a>
<a href="?p=admin_groupe&groupe_sync={{groupe.0}}" class="btn btn-warning btn-md"><i class="icon fa fa-sync"></i></a>
<button type="button" class="btn btn-danger btn-md" data-bs-toggle="modal" data-bs-target="#modalWarningSupUser" data-idsup="{{ groupe.0 }}"><i class="icon fa fa-trash"></i></button>
</td>
</tr>
Expand Down
Loading

0 comments on commit 0204964

Please sign in to comment.