Bonjour à toutes et à tous,
Dans le MVC que je suis en train de développer grace aux cours prodigués par Grafikart et ses homologues, je me retrouve devant une problématique, donc je ne connais pas la réponse, malgré les recherches GOOGLE.
Lorsque que mon utilisateur se connectE, je creer un objet où il est stocker le role de l'utilisateur avec les permissions qui sont accordés à ce role.

Array
(
    [SUPER] => App\Mz\Profiles Object
        (
            [permissions] => Array
                (
                    [add] => 1
                    [edit] => 1
                    [delete] => 1
                    [create] => 1
                    [view] => 1
                )

J'ai ensuite creer mes vues de chaque controller de cette maniere.

    public function Profile_Edit(){
        if($this->user->check_Permissions(__FUNCTION__)){

        }else{
            $this->Error(403, 'Vous n\'avez pas la permission requise');
        };
        $this->Render('admin.users.profile_edit');
    }

Au moment où l'utilsateur appelle cette fonction et donc cette url, je passe ma fonction Chek_permissions qui compare le nom de la fonction avec les permissions du role et je renvoie TRUE ou FALSE. Cependant je suis obligé de faire mon check_Permissions dans chaque fonction.

Ma questions est la suivante:
Est ce qu'il est possible de checker cette permissions dans le constructeur du controller appelé.
Genre je liste toutes les méthodes du controller que je stocke dans une variable.

$list_Function = get_this_class_methods(__CLASS__)

Et ensuite je faits mon check à la base. Ou alors est que l'utilisateur est obligé d'appellé l'url pour faire ce Fameux Check..
En vous REMERCIANT D'AVANCE POUR VOTRE AIDE PRECIEUSE.

4 réponses


Guique
Réponse acceptée

Ok. J'imagine que tu dois avoir un "super-controller" pour parser tes URLs et charger le bon controller.
J'imagine aussi que ton contrôle user se passe à cet endroit la.
Du coup, arrêtes moi si je me trompe, pourquoi ne pas ajouter une vérification des droits en fonction de la route demandée à ce moment la plutôt que d'attendre d'être dans un controller ?

Bonjour,

Pourrais-tu poster ta méthode check_Permissions ?

Mizzou
Auteur

OUI bien-entendu

 public function has_Permission($permission){
        return isset($this->permissions[$permission]);
    }
    /*
     * FONCTION PERMETANT DE DETERMINER SI L'UTILISATEUR A LA PERMISSION d'ACCEDER A CETTE FONCTION
     */
    public function check_Permissions($cible){
        $split = explode('_', $cible); // J'explose ma function par le '_'
        $perm = lo($split[1]); // Et je récupère le résultat que je souhaite et je le réduit en minuscule
        foreach($this->role as $profile){ // $profile est un objet App\Mz\Profiles Object
            if($profile->has_Permission($perm)){
                return TRUE;
            }
        }
        return FALSE;
    }
Mizzou
Auteur

OUI effectivement, ... Je n´y avait pas pense ..