Salut tout le monde, je suis en train de créer mon site (une sorte de blog) avec une architecture MVC. J'ai un fichier postController.php qui ressemble à ça :

class postController{
    public function index(){

    }

    public function view($id){

    }

    // Admin

    public function add(){

    }

    // etc.
}

Mon .htaccess renvoie tout vers un fichier index.php.

Ma question est comment vérifier qu'un admin est connecté pour les fonctions liées à l'administration ?
Je vérifie dans chaque fonction (add, edit, delete), je fais ça dans le fichier index.php ou je créé un fichier admin.php à part?
Merci par avance

8 réponses


Lors de l'appel de ta fonction (une fonction admin) tu check dans la session si l'utilisateur a les drois requis, sinon tu redirige vers une page
d'erreur.
On peut imaginer ça avec un tableau qui contiendrais les drois sous cette forme $table[fonction][action] = true ou false, dans ce cas là ça donnerais :

    public function add(){
        $permission = $_SESSION['user_permission'];
            if (!$permission['post']['add']) { // Si le tableau retourne false 
                //Redirection et message flash ou autre à toi de voir
                exit(); //on n'est jamais trop prudent
            }
            // Exécution de la fonction d'ajout
    }
hugopb82
Auteur

Du coup cela m'oblige à faire cette vérif à chaque appel de fonction! Je vais voir s'il est pas possible d'optimiser ça avec la methode __call()

Tu peut verifier directement au niveau de routes (je fait ça perso), un peut comme les filtres laravel.Le problème du call c'est que c'est pour toute la classe ;)

hugopb82
Auteur

Je ne comprends pas trop ce que tu veux dire :)
Tu vérifies si il y a "edit", "add", etc. dans l'url et si oui tu vérifies les permissions?

Tu peux t'inspirer des ACL de CakePHP je pense que ça pourrait t'aider

Non, je verifie au chargement de l'url. Par exemple j'accede en post à /admin/add (le traitment de ton formulaire d'ajout) normalment le router touve le controller et l'action à charger sauf si tu a passe un paramètre permission a ta route dans ce cas la le router verifie si tu as le droit.

$router->addRoute('admin/add', ['permission' => 'addPost' , ...]  
// Ici dans le tabelau je passe en paramètre qu'il faut la permission addPost le router fera donc les verifications en concéquence  

Bonjour,

Pas mal l'idée uneo7, comment tu fais pour differencier la page inexsitante et le manque de droit ? C'est à dire que l'utilisateur aura une page 404 pour l'administration et non un message quI lui dit qu'il n'a pas les droits suffisants.

Dans tout les cas dès qu'une erreur se produit il appelle ErrorContoller et l'action index et lui passe en paremètre un code d'erreur (ex 401, ou 404 http://fr.wikipedia.org/wiki/Liste_des_codes_HTTP) ensuite la fonction affiche la page en fonction du code obtenu