Bonjour à tous,
Lors de la réalisation d'un site avec XOOPS 2.5.0 et Multimenu 2.05, notre équipe a rencontrée un souci que nous avons pu corriger.
Lorsque nous avons plus d’une dizaine de groupe à gérer pour les droits au niveau des menus, les droits ne sont pas correctement respectés.
En effet, c’est une faille de multi-menu : lors de la recherche des droits pour les groupes dans la requête il y a un LIKE avec %no du groupe% or pour le groupe 2 nous allons aussi récupérer ce qui correspond au groupe 12 ou 22,etc….
Pour remédier à cette faille deux fichiers ont été corrigé avec les tags modif SVN :
Le fichier /www/modules/multimenu/include/function_commons.php
A la ligne 37 remplacer par :
//modif SVN pour pb droit au menu par groupes
$tabgroups = explode(' ',$data['groups']);
$menu_count = false;
foreach($tabgroups as $group_id ){
if (in_array($group_id,$user_group)){$menu_count = true;}
}
if ($menu_count) { //voir si utilisateur a le droit au menu
//fin modif SVN pour pb droit au menu par groupes
Le fichier /www/modules/multimenu/blocks/include/item.php
A la ligne 43 remplacer par :
// Is the menu available?
//modif SVn pb droit menu pour group
/* $menu_result = "SELECT image_dir
FROM ".$xoopsDB->prefix('multimenu_menu')."
WHERE status>=1 AND catid=" . $options[2] . " AND ( title='' ".$like." )"; */
$menu_result = "SELECT image_dir,groups FROM ".$xoopsDB->prefix('multimenu_menu')." WHERE status>=1 AND catid=" . $options[2] ;
$menu_list = $xoopsDB->queryF( $menu_result );
$menu_count = $xoopsDB->getRowsNum( $menu_list );
if( !$menu_count ) { Return False; }
$myrow = $xoopsDB->fetchArray( $menu_list );
$tabgroups = explode(' ',$myrow['groups']);
//print_r($tabgroups);
$menu_count = false;
foreach($tabgroups as $group_id ){
if (in_array($group_id,$user_group)){$menu_count = true;}
}
if( !$menu_count ) { Return False; }
//fin modif SVn pb droit menu pour group
A la ligne 121, remplacer par :
//modif SVn pb droit menu pour group
/* $result = "SELECT *
FROM ".$xoopsDB->prefix("multimenu_link")."
WHERE catid=".$options[2]." AND status>0 AND ( title='' ".$like." ) " . $where ."
ORDER BY " . $options[6];
; */
$result = "SELECT * FROM ".$xoopsDB->prefix("multimenu_link")." WHERE catid=".$options[2]." AND status>0 " . $where ." ORDER BY " . $options[6];
;
$link_list = $xoopsDB->queryF($result, $options[3], $rand);
En espérant que cela puisse servir aux créateurs du module.