New: Fin de la gestion des droits sur les groupes. Un utilisateur hérite donc des droits qui lui sont affectés directement + les droits des groupes auxquels il appartient.

This commit is contained in:
Laurent Destailleur 2005-03-06 00:55:55 +00:00
parent dd17f8e1ca
commit 43e0427538

View File

@ -305,54 +305,58 @@ class User
} }
/** /**
* \brief Charge dans l'objet user, la liste des permissions auxquels l'utilisateur a droit * \brief Charge dans l'objet user, la liste des permissions auxquelles l'utilisateur a droit
* \param module nom du module dont il faut récupérer les droits ('' par defaut signifie tous les droits) * \param module nom du module dont il faut récupérer les droits ('' par defaut signifie tous les droits)
*/ */
function getrights($module='') function getrights($module='')
{ {
if ($this->all_permissions_are_loaded) if ($this->all_permissions_are_loaded)
{ {
// Si les permissions ont déja été chargé pour ce user, on quitte // Si les permissions ont déja été chargé pour ce user, on quitte
return; return;
} }
/* // Récupération des droits utilisateurs + récupération des droits groupes
* Récupération des droits $sql = "SELECT r.module, r.perms, r.subperms";
*/ $sql .= " FROM ".MAIN_DB_PREFIX."user_rights as ur, ".MAIN_DB_PREFIX."rights_def as r";
$sql = "SELECT r.module, r.perms, r.subperms "; $sql .= " WHERE r.id = ur.fk_id AND ur.fk_user= $this->id AND r.perms IS NOT NULL";
$sql .= " FROM ".MAIN_DB_PREFIX."user_rights as u, ".MAIN_DB_PREFIX."rights_def as r"; $sql .= " UNION ALL";
$sql .= " WHERE r.id = u.fk_id AND u.fk_user= $this->id AND r.perms IS NOT NULL"; $sql .= " SELECT r.module, r.perms, r.subperms";
if ($this->db->query($sql)) $sql .= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr, ".MAIN_DB_PREFIX."usergroup_user as gu, ".MAIN_DB_PREFIX."rights_def as r";
{ $sql .= " WHERE r.id = gr.fk_id AND gr.fk_usergroup = gu.fk_usergroup AND gu.fk_user= $this->id AND r.perms IS NOT NULL";
$num = $this->db->num_rows();
$i = 0; $result = $this->db->query($sql);
while ($i < $num) if ($result)
{ {
$row = $this->db->fetch_row(); $num = $this->db->num_rows($result);
$i = 0;
if (strlen($row[1]) > 0) while ($i < $num)
{ {
$row = $this->db->fetch_row($result);
if (strlen($row[2]) > 0)
{ if (strlen($row[1]) > 0)
$this->rights->$row[0]->$row[1]->$row[2] = 1; {
}
else if (strlen($row[2]) > 0)
{ {
$this->rights->$row[0]->$row[1] = 1; $this->rights->$row[0]->$row[1]->$row[2] = 1;
} }
else
} {
$i++; $this->rights->$row[0]->$row[1] = 1;
} }
}
}
$i++;
}
}
if ($module == '') if ($module == '')
{ {
// Si module etait non defini, alors on a tout chargé, on peut donc considérer // Si module etait non defini, alors on a tout chargé, on peut donc considérer
// que les droits sont en cache (car tous chargés) pour cet instance de user // que les droits sont en cache (car tous chargés) pour cet instance de user
$this->all_permissions_are_loaded=1; $this->all_permissions_are_loaded=1;
} }
} }