Bonjour a tous!
J'ai sécurisé mon backoffice avec le composent Auth, jusque la pas très compliqué. L truc bizarre c'est qu'il ne protège pas les pages statiques. J'aimerais que mes pages admin_page.ctp soit protégé or avec le prefixe admin, il cherche le controller adminController.php.

Logiquement je me suis dit qu'une fonction admin_display() dans le controller pages pouvait régler le problème mais non.

En bref, j'aimerai simplement que les pages ayant l'url: /admin/pages/ma-page soient protégés et que les pages ayant l'url /pages/ma-page ne le soient pas.

Merci à tous!

2 réponses


Hello,

Suie les tuto de Grafikart, Cakephp jour 4 il me semble. Il te faut un beforefilter dans ton AppController pour gérer ca,

Personnellement je n'utilise pas cette technique, mais j'avais testé :D , le code qu'explique Grafikart ressemble à peut près à celui-ci:

function beforeFilter(){
        $this->Auth->loginAction = array('controller'=>'users','action'=>'login','admin'=>false); // Redirige vers "Users"
        $this->Auth->authorize = array('Controller');
        //$this->Auth->Authenticate // Permet de défnir la méthode d'authentification
        if(!isset($this->request->params'prefix'])){ // Vérifie s'il y a un prefix, soit "admin"
            $this->Auth->allow(); // l'action va être autorisé  
        }
        if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
            $this->layout = 'admin'; // Si page admin layout :> admin
        }
    }
    function isAuthorized($user){
        if(!isset($this->request->params'prefix'])){
            return true;
        }
        $roles = array(
            'admin' => 10,
            'plus' => 5,
            'membre' => 1
        );
        $this->set('roles',$roles); // envoie les roles
        if(isset($roles$this->request->params'prefix']])){
            $lvlAction = $roles$this->request->params'prefix']];
            $lvlUser = $roles$user'role']];
            // Si l'utilisateur est supérieur au niveau, il a accès
            if($lvlUser >= $lvlAction){
                return true;
            }else{
                return false;
            }
        }
        return true;
    }

Hésite pas à montrer ton code, c'est plus simple à comprendre ce que tu veux dire. A+

Bonjour et merci pour la réponse !

En fait j'ai pas vraiment de code. Le truc c'est que le composent Auth ne sécurise pas les pages statiques tous simplement parce qu'il y a qu'une seul fonction "display" qui affiche toutes les autres pages.

Finalement j'ai réussi à organisant différemment. J'ai crée carrément un controller et un model pour La documentation et j'ai crée une fonction admin_dashbord() pour qu'il soit prit en compte par le composent Auth.

Voila je laisse ouvert le post au cas ou quelqu'un sait comment faire sans créer de fonction admin_mafonction() dans PagesController().

Merci encore !