diff --git a/htdocs/admin/perms.php b/htdocs/admin/perms.php index 88c4adcfca7379752219f2cd5ac9eda8986efd62..3fc25bef079d628fd807f873c3e7bede54320213 100644 --- a/htdocs/admin/perms.php +++ b/htdocs/admin/perms.php @@ -82,9 +82,10 @@ while (($file = readdir($handle))!==false) } // Affiche lignes des permissions -$sql = "SELECT r.id, r.libelle, r.module, r.bydefault FROM ".MAIN_DB_PREFIX."rights_def as r"; -$sql .= " WHERE type <> 'a'"; -$sql .= " ORDER BY r.id ASC"; +$sql ="SELECT r.id, r.libelle, r.module, r.bydefault"; +$sql.=" FROM ".MAIN_DB_PREFIX."rights_def as r"; +$sql.=" WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous" +$sql.=" ORDER BY r.id, r.module"; $result = $db->query($sql); if ($result) @@ -100,9 +101,13 @@ if ($result) if ($old <> $obj->module) { + // Rupture d�tect�e, on r�cup�re objMod + $objMod=$modules[$obj->module]; + $picto=($objMod->picto?$objMod->picto:'generic'); + print '<tr class="liste_titre">'; - print '<td>'.$langs->trans("Permission").'</td>'; print '<td>'.$langs->trans("Module").'</td>'; + print '<td>'.$langs->trans("Permission").'</td>'; print '<td align="center">'.$langs->trans("Default").'</td>'; print '<td align="center"> </td>'; print "</tr>\n"; @@ -110,9 +115,13 @@ if ($result) } print '<tr '. $bc[$var].'>'; + + print '<td>'.img_object('',$picto).' '.$objMod->getName(); + $perm_libelle=(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$obj->libelle); print '<td>'.$perm_libelle. '</td>'; - print '<td>'.$modules[$obj->module]->getName(). '</td><td align="center">'; + + print '<td align="center">'; if ($obj->bydefault == 1) { @@ -133,6 +142,7 @@ if ($result) } print '</table>'; +print '<br>'; $db->close(); diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php index b215de1509e34023da0077c0e0aa91d013ba99f6..6436b908411b278d25242d362c2edc411065fc8b 100644 --- a/htdocs/user/group/perms.php +++ b/htdocs/user/group/perms.php @@ -45,13 +45,13 @@ $module=isset($_GET["module"])?$_GET["module"]:$_POST["module"]; if ($_GET["action"] == 'addrights' && $user->admin) { $editgroup = new Usergroup($db,$_GET["id"]); - $editgroup->addrights($_GET["rights"]); + $editgroup->addrights($_GET["rights"],$module); } if ($_GET["action"] == 'delrights' && $user->admin) { $editgroup = new Usergroup($db,$_GET["id"]); - $editgroup->delrights($_GET["rights"]); + $editgroup->delrights($_GET["rights"],$module); } @@ -68,7 +68,7 @@ if ($_GET["id"]) { $fgroup = new Usergroup($db, $_GET["id"]); $fgroup->fetch($_GET["id"]); - $fgroup->getrights($_GET["id"]); + $fgroup->getrights(); /* * Affichage onglets @@ -107,9 +107,7 @@ if ($_GET["id"]) while ($i < $num) { $obj = $db->fetch_object($result); - array_push($permsgroup,$obj->id); - $i++; } $db->free($result); @@ -148,13 +146,16 @@ if ($_GET["id"]) print '<table width="100%" class="noborder">'; print '<tr class="liste_titre">'; + print '<td>'.$langs->trans("Module").'</td>'; if ($user->admin) print '<td width="24"> </td>'; print '<td align="center" width="24"> </td>'; print '<td>'.$langs->trans("Permissions").'</td>'; - print '<td>'.$langs->trans("Module").'</td>'; print '</tr>'; - $sql = "SELECT r.id, r.libelle, r.module FROM ".MAIN_DB_PREFIX."rights_def as r ORDER BY r.module, r.id ASC"; + $sql ="SELECT r.id, r.libelle, r.module"; + $sql.=" FROM ".MAIN_DB_PREFIX."rights_def as r"; + $sql.=" WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous" + $sql.=" ORDER BY r.id, r.module"; $result=$db->query($sql); if ($result) @@ -169,17 +170,28 @@ if ($_GET["id"]) { $oldmod = $obj->module; $var = !$var; - print '<tr '. $bc[$var].'>'; - // Recup�re objMod + // Rupture d�tect�e, on r�cup�re objMod $objMod = $modules[$obj->module]; $picto=($objMod->picto?$objMod->picto:'generic'); - } - else - { + print '<tr '. $bc[$var].'>'; + print '<td>'.img_object('',$picto).' '.$objMod->getName(); + print '<a name="'.$objMod->getName().'"> </a></td>'; + print '<td align="center" nowrap>'; + print '<a title='.$langs->trans("All").' alt='.$langs->trans("All").' href="perms.php?id='.$fgroup->id.'&action=addrights&module='.$obj->module.'">'.$langs->trans("All")."</a>"; + print '/'; + print '<a title='.$langs->trans("None").' alt='.$langs->trans("None").' href="perms.php?id='.$fgroup->id.'&action=delrights&module='.$obj->module.'">'.$langs->trans("None")."</a>"; + print '</td>'; + print '<td colspan="2"> </td>'; + print '</tr>'; } + print '<tr '. $bc[$var].'>'; + + print '<td>'.img_object('',$picto).' '.$objMod->getName(); + print '</td>'; + if (in_array($obj->id, $permsgroup)) { // Own permission by group @@ -187,7 +199,7 @@ if ($_GET["id"]) { print '<td align="center"><a href="perms.php?id='.$fgroup->id.'&action=delrights&rights='.$obj->id.'">'.img_edit_remove($langs->trans("Remove")).'</a></td>'; } - print '<td align="left" align="center">'; + print '<td align="center">'; print img_tick(); print '</td>'; } @@ -204,9 +216,6 @@ if ($_GET["id"]) $perm_libelle=(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$obj->libelle); print '<td>'.$perm_libelle. '</td>'; - print '<td>'.img_object('',$picto).' '.$objMod->getName(); - print '</td>'; - print '</tr>'; $i++; diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index d89a483a05678173626d6441aa30dc89956f2ca1..b5a0b26143ce7eddee863d2e24d79cab0a1fee64 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -45,13 +45,13 @@ $module=isset($_GET["module"])?$_GET["module"]:$_POST["module"]; if ($_GET["action"] == 'addrights' && $user->admin) { $edituser = new User($db,$_GET["id"]); - $edituser->addrights($_GET["rights"]); + $edituser->addrights($_GET["rights"],$module); } if ($_GET["action"] == 'delrights' && $user->admin) { $edituser = new User($db,$_GET["id"]); - $edituser->delrights($_GET["rights"]); + $edituser->delrights($_GET["rights"],$module); } @@ -184,13 +184,16 @@ if ($_GET["id"]) print '<table width="100%" class="noborder">'; print '<tr class="liste_titre">'; + print '<td>'.$langs->trans("Module").'</td>'; if ($user->admin) print '<td width="24"> </td>'; print '<td align="center" width="24"> </td>'; print '<td>'.$langs->trans("Permissions").'</td>'; - print '<td>'.$langs->trans("Module").'</td>'; print '</tr>'; - $sql = "SELECT r.id, r.libelle, r.module FROM ".MAIN_DB_PREFIX."rights_def as r ORDER BY r.module, r.id ASC"; + $sql ="SELECT r.id, r.libelle, r.module"; + $sql.=" FROM ".MAIN_DB_PREFIX."rights_def as r"; + $sql.=" WHERE r.libelle NOT LIKE 'tou%'"; // On ignore droits "tous" + $sql.=" ORDER BY r.id, r.module"; $result=$db->query($sql); if ($result) @@ -205,17 +208,28 @@ if ($_GET["id"]) { $oldmod = $obj->module; $var = !$var; - print '<tr '. $bc[$var].'>'; - // R�cup�re objMod + // Rupture d�tect�e, on r�cup�re objMod $objMod=$modules[$obj->module]; $picto=($objMod->picto?$objMod->picto:'generic'); - } - else - { + print '<tr '. $bc[$var].'>'; + print '<td>'.img_object('',$picto).' '.$objMod->getName(); + print '<a name="'.$objMod->getName().'"> </a></td>'; + print '<td align="center" nowrap>'; + print '<a title='.$langs->trans("All").' alt='.$langs->trans("All").' href="perms.php?id='.$fuser->id.'&action=addrights&module='.$obj->module.'">'.$langs->trans("All")."</a>"; + print '/'; + print '<a title='.$langs->trans("None").' alt='.$langs->trans("None").' href="perms.php?id='.$fuser->id.'&action=delrights&module='.$obj->module.'">'.$langs->trans("None")."</a>"; + print '</td>'; + print '<td colspan="2"> </td>'; + print '</tr>'; } + print '<tr '. $bc[$var].'>'; + + print '<td>'.img_object('',$picto).' '.$objMod->getName(); + print '</td>'; + if (in_array($obj->id, $permsuser)) { // Own permission by user @@ -223,7 +237,7 @@ if ($_GET["id"]) { print '<td align="center"><a href="perms.php?id='.$fuser->id.'&action=delrights&rights='.$obj->id.'">'.img_edit_remove($langs->trans("Remove")).'</a></td>'; } - print '<td align="left" align="center">'; + print '<td align="center">'; print img_tick(); print '</td>'; } @@ -231,7 +245,7 @@ if ($_GET["id"]) // Own permission by group if ($user->admin) { - print '<td>'.$langs->trans("Group").'</td>'; + print '<td align="center">'.$langs->trans("Group").'</td>'; } print '<td align="left" nowrap>'; print img_tick(); @@ -250,9 +264,6 @@ if ($_GET["id"]) $perm_libelle=(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$obj->libelle); print '<td>'.$perm_libelle. '</td>'; - print '<td>'.img_object('',$picto).' '.$objMod->getName(); - print '</td>'; - print '</tr>'; $i++; diff --git a/htdocs/usergroup.class.php b/htdocs/usergroup.class.php index adc87ec9b4e36a025dae07bff7a91d9e20e62513..a0ca3d285fccc492ea525fb052ca7388013a7290 100644 --- a/htdocs/usergroup.class.php +++ b/htdocs/usergroup.class.php @@ -97,146 +97,196 @@ class UserGroup /** - * \brief Ajoute un droit au groupe + * \brief Ajoute un droit a l'utilisateur * \param rid id du droit � ajouter + * \param allmodule Ajouter tous les droits du module allmodule + * \param allperms Ajouter tous les droits du module allmodule, perms allperms * \return int > 0 si ok, < 0 si erreur */ - function addrights($rid) + function addrights($rid,$allmodule='',$allperms='') { - if (strlen($rid) == 2) - { - $topid = substr($rid,0,1); - $lowid = substr($rid,1,1); - } - - if (strlen($rid) == 3) - { - $topid = substr($rid,0,2); - $lowid = substr($rid,2,1); - } - - if ($lowid == 1) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$rid"; - $this->db->query($sql); - $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_rights (fk_usergroup, fk_id) VALUES ($this->id, $rid)"; - if ($this->db->query($sql)) - { - } - } - - if ($lowid > 1) + $err=0; + $whereforadd=''; + + $this->db->begin(); + + if ($rid) { - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$rid"; - $this->db->query($sql); - $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_rights (fk_usergroup, fk_id) VALUES ($this->id, $rid)"; - if ($this->db->query($sql)) - { - } - - $nid = $topid . "1"; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$nid"; - $this->db->query($sql); - $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_rights (fk_usergroup, fk_id) VALUES ($this->id, $nid)"; - if ($this->db->query($sql)) - { - + // Si on a demand� ajout d'un droit en particulier, on r�cup�re + // les caract�ristiques (module, perms et subperms) de ce droit. + $sql = "SELECT module, perms, subperms"; + $sql.= " FROM ".MAIN_DB_PREFIX."rights_def"; + $sql.= " WHERE "; + $sql.=" id = '".$rid."'"; + + $result=$this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + $module=$obj->module; + $perms=$obj->perms; + $subperms=$obj->subperms; } - else - { + else { + $err++; dolibarr_print_error($this->db); } + + // Where pour la liste des droits � ajouter + $whereforadd="id=".$rid; + // Ajout des droits induits + if ($subperms) $whereforadd.=" OR (module='$module' AND perms='$perms' AND subperms='lire')"; + if ($perms) $whereforadd.=" OR (module='$module' AND perms='lire' AND subperms IS NULL)"; + + // Pour compatibilit�, si lowid = 0, on est en mode ajout de tout + // \todo A virer quand sera g�r� par l'appelant + if (substr($rid,-1,1) == 0) $whereforadd="module='$module'"; } - - if ($lowid == 0) + else { + // Where pour la liste des droits � ajouter + if ($allmodule) $whereforadd="module='$allmodule'"; + if ($allperms) $whereforadd=" AND perms='$allperms'"; + } + + // Ajout des droits de la liste whereforadd + if ($whereforadd) { - for ($i = 1 ; $i < 10 ; $i++) + //print "$module-$perms-$subperms"; + $sql = "SELECT id"; + $sql.= " FROM ".MAIN_DB_PREFIX."rights_def"; + $sql.= " WHERE $whereforadd"; + + $result=$this->db->query($sql); + if ($result) { - $nid = $topid . "$i"; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$nid"; - $this->db->query($sql); - $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_rights (fk_usergroup, fk_id) VALUES ($this->id, $nid)"; - if ($this->db->query($sql)) + $num = $this->db->num_rows($result); + $i = 0; + while ($i < $num) { + $obj = $this->db->fetch_object($result); + $nid = $obj->id; + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$nid"; + if (! $this->db->query($sql)) $err++; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_rights (fk_usergroup, fk_id) VALUES ($this->id, $nid)"; + if (! $this->db->query($sql)) $err++; + $i++; } - else - { - dolibarr_print_error($this->db); - } + } + else + { + $err++; + dolibarr_print_error($this->db); } } - - return 1; + if ($err) { + $this->db->rollback(); + return -$err; + } + else { + $this->db->commit(); + return 1; + } + } /** - * \brief Retire un droit au groupe - * \param rid id du droit � retirer + * \brief Retire un droit a l'utilisateur + * \param rid id du droit � retirer + * \param allmodule Retirer tous les droits du module allmodule + * \param allperms Retirer tous les droits du module allmodule, perms allperms * \return int > 0 si ok, < 0 si erreur */ - function delrights($rid) + function delrights($rid,$allmodule='',$allperms='') { - if (strlen($rid) == 2) - { - $topid = substr($rid,0,1); - $lowid = substr($rid,1,1); - } - - if (strlen($rid) == 3) - { - $topid = substr($rid,0,2); - $lowid = substr($rid,2,1); - } - - if ($lowid > 1) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$rid"; - if ($this->db->query($sql)) - { - } - } - - if ($lowid == 1) + $err=0; + $wherefordel=''; + + $this->db->begin(); + + if ($rid) { - $fid = $topid . "0"; - $lid = $topid . "9"; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id >= $fid AND fk_id <= $lid"; - if ($this->db->query($sql)) - { - + // Si on a demand� supression d'un droit en particulier, on r�cup�re + // les caract�ristiques module, perms et subperms de ce droit. + $sql = "SELECT module, perms, subperms"; + $sql.= " FROM ".MAIN_DB_PREFIX."rights_def"; + $sql.= " WHERE "; + $sql.=" id = '".$rid."'"; + + $result=$this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + $module=$obj->module; + $perms=$obj->perms; + $subperms=$obj->subperms; } - else - { + else { + $err++; dolibarr_print_error($this->db); } + + // Where pour la liste des droits � supprimer + $wherefordel="id=".$rid; + // Suppression des droits induits + if ($subperms=='lire') $wherefordel.=" OR (module='$module' AND perms='$perms' AND subperms IS NOT NULL)"; + if ($perms=='lire') $wherefordel.=" OR (module='$module')"; + + // Pour compatibilit�, si lowid = 0, on est en mode suppression de tout + // \todo A virer quand sera g�r� par l'appelant + if (substr($rid,-1,1) == 0) $wherefordel="module='$module'"; } - - if ($lowid == 0) + else { + // Where pour la liste des droits � supprimer + if ($allmodule) $wherefordel="module='$allmodule'"; + if ($allperms) $wherefordel=" AND perms='$allperms'"; + } + + // Suppression des droits de la liste wherefordel + if ($wherefordel) { - for ($i = 1 ; $i < 10 ; $i++) + //print "$module-$perms-$subperms"; + $sql = "SELECT id"; + $sql.= " FROM ".MAIN_DB_PREFIX."rights_def"; + $sql.= " WHERE $wherefordel"; + + $result=$this->db->query($sql); + if ($result) { - $nid = $topid . "$i"; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$nid"; - if ($this->db->query($sql)) + $num = $this->db->num_rows($result); + $i = 0; + while ($i < $num) { + $obj = $this->db->fetch_object($result); + $nid = $obj->id; + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_rights WHERE fk_usergroup = $this->id AND fk_id=$nid"; + if (! $this->db->query($sql)) $err++; - } - else - { - dolibarr_print_error($this->db); + $i++; } } + else + { + $err++; + dolibarr_print_error($this->db); + } } - return 1; - } + if ($err) { + $this->db->rollback(); + return -$err; + } + else { + $this->db->commit(); + return 1; + } + } + /** * \brief Charge dans l'objet group, la liste des permissions auquels le groupe a droit