Fix: Droits parfois chargés en double

This commit is contained in:
Laurent Destailleur 2007-11-13 20:17:52 +00:00
parent ce1eed6f78
commit 4633330b6f

View File

@ -50,48 +50,52 @@ class User extends CommonObject
var $error; var $error;
var $element='user'; var $element='user';
var $table_element='user'; var $table_element='user';
var $id;
var $ldap_sid;
var $search_sid;
var $fullname;
var $nom;
var $prenom;
var $note;
var $email;
var $office_phone;
var $office_fax;
var $user_mobile;
var $admin;
var $login;
//! Mot de passe en clair en mémoire var $id;
var $pass; var $ldap_sid;
//! Mot de passe en clair en base (renseigné si DATABASE_PWD_ENCRYPTED=0) var $search_sid;
var $pass_indatabase; var $fullname;
//! Mot de passe crypté en base (toujours renseigné) var $nom;
var $pass_indatabase_crypted; var $prenom;
var $note;
var $email;
var $office_phone;
var $office_fax;
var $user_mobile;
var $admin;
var $login;
//! Mot de passe en clair en mémoire
var $pass;
//! Mot de passe en clair en base (renseigné si DATABASE_PWD_ENCRYPTED=0)
var $pass_indatabase;
//! Mot de passe crypté en base (toujours renseigné)
var $pass_indatabase_crypted;
var $datec;
var $datem;
var $societe_id;
var $fk_member;
var $webcal_login;
var $phenix_login;
var $phenix_pass;
var $phenix_pass_crypted;
var $datelastlogin;
var $datepreviouslogin;
var $statut;
var $lang;
var $userpref_limite_liste;
//! Liste des entrepots auquel a acces l'utilisateur
var $entrepots;
var $rights;
var $all_permissions_are_loaded; /**< \private all_permissions_are_loaded */
var $tab_loaded=array(); // Tableau pour signaler les permissions deja chargées
var $datec;
var $datem;
var $societe_id;
var $fk_member;
var $webcal_login;
var $phenix_login;
var $phenix_pass;
var $phenix_pass_crypted;
var $datelastlogin;
var $datepreviouslogin;
var $statut;
var $lang;
var $userpref_limite_liste;
var $all_permissions_are_loaded; /**< \private all_permissions_are_loaded */
//! Liste des entrepots auquel a acces l'utilisateur
var $entrepots;
var $tab_loaded=array(); // Tableau pour signaler les permissions deja chargées
/** /**
@ -467,6 +471,7 @@ class User extends CommonObject
{ {
$this->rights=''; $this->rights='';
$this->all_permissions_are_loaded=false; $this->all_permissions_are_loaded=false;
$this->tab_loaded=array();
} }
@ -474,9 +479,13 @@ class User extends CommonObject
\brief Charge dans l'objet user, la liste des permissions auxquelles 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($moduletag='')
{ {
if ($module && isset($this->tab_loaded[$module]) && $this->tab_loaded[$module]) { return; } // Le fichier de ce module est deja chargé if ($moduletag && isset($this->tab_loaded[$moduletag]) && $this->tab_loaded[$moduletag])
{
// Le fichier de ce module est deja chargé
return;
}
if ($this->all_permissions_are_loaded) if ($this->all_permissions_are_loaded)
{ {
@ -485,13 +494,14 @@ class User extends CommonObject
} }
// Récupération des droits utilisateurs + récupération des droits groupes // Récupération des droits utilisateurs + récupération des droits groupes
dolibarr_syslog('User::Getrights id='.$this->id.' module='.$module, LOG_DEBUG);
// D'abord les droits utilisateurs // D'abord les droits utilisateurs
$sql = "SELECT r.module, r.perms, r.subperms"; $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.= " FROM ".MAIN_DB_PREFIX."user_rights as ur, ".MAIN_DB_PREFIX."rights_def as r";
$sql .= " WHERE r.id = ur.fk_id AND ur.fk_user= ".$this->id." AND r.perms IS NOT NULL"; $sql.= " WHERE r.id = ur.fk_id AND ur.fk_user= ".$this->id." AND r.perms IS NOT NULL";
if ($moduletag) $sql.= " AND r.module = '".addslashes($moduletag)."'";
dolibarr_syslog('User::getRights sql='.$sql, LOG_DEBUG);
$result = $this->db->query($sql); $result = $this->db->query($sql);
if ($result) if ($result)
{ {
@ -528,10 +538,12 @@ class User extends CommonObject
} }
// Maintenant les droits groupes // Maintenant les droits groupes
$sql = " SELECT r.module, r.perms, r.subperms"; $sql = "SELECT r.module, r.perms, r.subperms";
$sql .= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr, ".MAIN_DB_PREFIX."usergroup_user as gu, ".MAIN_DB_PREFIX."rights_def as r"; $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"; $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";
if ($moduletag) $sql.= " AND r.module = '".addslashes($moduletag)."'";
dolibarr_syslog('User::getRights sql='.$sql, LOG_DEBUG);
$result = $this->db->query($sql); $result = $this->db->query($sql);
if ($result) if ($result)
{ {
@ -559,7 +571,7 @@ class User extends CommonObject
$this->db->free($result); $this->db->free($result);
} }
if (! $module) if (! $moduletag)
{ {
// 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
@ -567,8 +579,8 @@ class User extends CommonObject
} }
else else
{ {
// Si module défini, on considère chargé en cache que le module // Si module défini, on le marque comme chargé en cache
$this->tab_loaded[$module]=1; $this->tab_loaded[$moduletag]=1;
} }
} }