Prestashop : Pages CMS privées

Aloha !
aujourd’hui, on se bat avec prestashop !
Objectif : Limiter l’acces de certaines pages CMS a certains groupes de clients.
La méthode : quick & dirty, codage en dur des groupes autorisés, et choix techniques aléatoires ! Ayant 0 expérience  sur smarty , ça n’aide pas à avoir du recul ..

Mais peu importe :]

Base de donnée :

Pas de probleme ici, nous allons juste rajouter un champ à la table « ps_cms », qui correspondra au niveau de groupe minimum pour voir la page. Appellons le « plvl »,   INT (3) avec 0 en valeur par défaut, pour que toutes nos pages soient publiques par défaut.
Nos id_group sont, classiquement, (1=>visiteurs, 2=>invités, 3=>clients). Nous aurons également (4=>membre, 5=>associé ) pour ce projet.

Classes :

Pas de soucis ici non plus, on édite « /classes/CMS.php ». Pas d’override, on est des fous !
Pour commencer, ajoutons nos défintions de variable :

    public $plvl;
    public $clvl;

Dans la définition de notre objet cms[« fields »], apres la définitation de « active », ajoutons la ligne :

            'plvl' =>            array('type' => self::TYPE_INT),

 

Controller :

Ouvrons « controllers/admin/AdminCmsController.php » et ajoutons ceci dans à la fin de la définition de $this->fields_list

            , 'plvl' => array('title' => $this->l('Niveau d\'accès minimum'))

Et ceci dans renderForm(), par exemple en dessous de la definition du switch active,  pour avoir notre gestion en back office.

,
                array(
                    'type' => 'text',
                    'label' => "Niveau de sécurité",
                    'name' => 'plvl',
                    'required' => false,
                    'hint' => array(
                        $this->l('Taper 0 pour des pages visibles par tous, 4 pour des pages réservés aux membres et associés, 5 pour les pages réservées aux associés')
                    ),
                )

Cookie :

Pour que notre id_group soit disponible au chargement de la page, il va nous falloir passer par les cookies. Gestion de la création, destruction et mise à jour donc (tout un programme … lol ). Modifions /controllers/front/AuthController.php, pour ajouter cette ligne dans la méthode processSubmitLogin().

$this->context->cookie->clvl = $customer->id_default_group;

et cette ligne dans updateContext():

        $this->context->cookie->clvl=$customer->id_default_group;

Modifier ensuite classes/Cookie.php pour y ajouter cette ligne, dans mylogout() :

        unset($this->_content['clvl']);

et ajoutons une méthode à la classe cms (/classes/CMS.php)

public static function getclvl(){
    global $cookie;
    if(isset($cookie->clvl)) {return $cookie->clvl;}
    else return 1;
}

 

Template :

Presque fini ! Editons le template cms.tpl dans le dossier de votre theme.
Remplacons :

    <div class="rte{if $content_only} content_only{/if}">
        {$cms->content}
    </div>

par :

    <div class="rte{if $content_only} content_only{/if}">
       {if $cms->getclvl()>$cms->plvl}
            {$cms->content}
        {else}
            <p>Vous ne pouvez pas acceder à cette page.</p>
        {/if}
    </div>

Voila une MAJ un peu sauvage qui va bien !
Peut-être y avait t’il moyen de procéder sans les cookies ?

Laisser un commentaire