Dernièrement j’ai souhaité désactiver l’affichage d’un élément de menu dans le back-office de prestashop 1.7 .
Pour un utilisateur standard c’est relativement simple puisqu’il suffit de jouer avec les permissions pour afficher / masquer les différents menu, mais ce n’est pas le cas dans un rôle d’administrateur.

La page de gestion des menus qui existait dans les anciennes versions n’est plus accessible, via des liens existants ( ou alors je ne l’ai pas trouvée ).
La bonne nouvelle par contre c’est que le controlleur existe toujours.

Pour (re)faire fonctionner la gestion des menus, nous allons donc créer un nouveau module hh_adminmenu
Avec le contenu suivant :

class Hh_AdminMenu extends Module {
 
    public function __construct() {
 
        $this->name = 'hh_adminmenu';
        $this->displayName = 'HH admin menu';
        $this->tab = '';
        $this->version = '0.1.0';
        $this->author = 'hhhennes';
 
        parent::__construct();
 
        $this->displayName = $this->l('Hh Admin menu');
        $this->description = $this->l('Display again admin menu management');
        $this->ps_versions_compliancy = array('min' => '1.7.1', 'max' => _PS_VERSION_);
    }
 
    /**
     * Install Module
     * @return boolean
     */
    public function install() {
 
        if (!parent::install()) {
            return false;
        }
 
        //Ajout du liens vers la page des menus existants
        $tab = new Tab();
        $tab->class_name = 'AdminTabs';
        $tab->id_parent = Tab::getIdFromClassName('AdminAdvancedParameters');
        $languages = Language::getLanguages();
        foreach ($languages as $lang) {
            $tab->name[$lang['id_lang']] = $this->l('Menus');
        }
        try {
            $tab->save();
        } catch (Exception $e) {
            echo $e->getMessage();
            return false;
        }
 
        return true;
    }
 
    /**
     * Uninstall module
     * @return boolean
     */
    public function uninstall() {
 
        if ( !parent::uninstall() ) {
            return false ;
        }
 
        $id_tab = Tab::getIdFromClassName('AdminTabs');
        $tab = new Tab($id_tab);
        try{
            $tab->delete();
        } catch (Exception $e) {
            echo $e->getMessage();
            return false;
        }
 
        return true;
    }
 
}

L’installation du menu permettra le retour de l’élément “menus” dans les Paramètre avancés

Menu admin

La gestion des droits de cette page a été modifiée pour en interdire l’accès, il est donc également nécessaire de sucharger le controller AdminTabsController
via le fichier override/controllers/admin/AdminTabsController.php avec le contenu suivant :

class AdminTabsController extends AdminTabsControllerCore {
 
 
    /**
     * Changement du mode d'accès pour pouvoir afficher l'onglet
     * @param string $action
     * @param bool $disable
     */
    public function access($action, $disable = false)
    {
        return Profile::getProfileAccess($this->context->employee->id_profile, Tab::getCurrentTabId());       
    }
 
}

Une fois le module installé, le menu est bien de retour 🙂

Menus admins