Partie admin dans un MVC

Par hugopb82, il y a 11 ans


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

Uneo7, il y a 11 ans

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, il y a 11 ans

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()

Uneo7, il y a 11 ans

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, il y a 11 ans

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?

MrSaooty, il y a 11 ans

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

Uneo7, il y a 11 ans

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
connected, il y a 11 ans

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.

Uneo7, il y a 11 ans

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