Bonjour à tous,

J'ai une petite question, je suis entrain de développer une application avec CakePHP et je me pose une petite question vis-à-vis d'une bonne pratique.

J'ai géré la partie "connexion / déconnexion" etc dans le but notamment, de créer un backoffice. Du coup, dans mes actions je fais :

<?php
      if(!$this->Auth->user('id')){
        return $this->redirect(
            array('controller' => 'users', 'action' => 'login')
        );
      }
  ?>

Comme ça je peux voir si l'utilisateur est connecté ou pas, et si ça n'est pas le cas je vais le rediriger. Je vais d'ailleurs rajouter un check sur la partie "rôle".

Donc du coup, je remets ce même code dans chaque action de tous mes controllers (enfin je l'ai pas encore fait mais je m'apprête à le faire).
Or, c'est moche, enfin vraiment très moche.

Est-ce qu'il y aurait une méthode plus propre pour mettre cette vérification dans une fonction qu'on appelle dans les actions mais qui n'est "écrite" que dans une seule classe ? Genre comme un service, ou un truc du genre ?

Merci d'avance pour vos idées, avis, etc !

6 réponses


Muxabble
Réponse acceptée
public function isAuthorized($user)
{
    // Admin can access every action
    if (isset($user['role']) && $user['role'] === 'admin') {
        return true;
    }

    // Default deny
    return false;
}

Sur la doc et le tutoriel d'authentification de CakePHP 3.0

Tu est sur quel version de Cake je dirais la 2 au vu de ton code, mais sache que tu peut le faire dans l'AppController

Nope, en fait je suis sur la trois, enfin je débute sur la trois ^^'

Parfait regarde la doc dansgetting started tout est expliquer tu verifie tout en maintenant la connexion et le role

Hum, au risque de passer pour un idiot, dans quelle partie de "Getting started" ? Parce-que là c'est un peu vague... Je suis allé voir du côté des controller, et de la partie "Security", mais en dehors de voir comment récupérer l'utilisateur connecté (ce que j'ai fait), je ne vois rien de particulier concernant l'information que tu me donnes...

EDIT : Désolé pour le miss click sur la validation du sujet -_-'

Ah ok ! Je vais aller voir ça de plus près, merci pour ton aide :)