Bonjour,

je suis la formation cakephp et je rencontre un soucis sur les prefixages et les permissions a leur donner, je m explique:
j ai plusieur niveau de droit sur mon projet admin, manager, redacteur et agences. je souaiterai que les manager puissent voir les actions des redacteur et des agences, que les redacteurs puissent voir les actions des agences et que les agences ai juste acces a leurs actions plus celle de l'utilisateur non connecté. y at il une solution? j ai essayer de passer par l' appcontroller dans un beforefilter mais je m'y perds un peu.
j ai modifier mon core.php avec tout mes prefix mais je ne reussi pas a faire en sorte que cela fonctionne.
je pensai faire ceci auniveau du beforefilter de l'appcontroller:

if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
                if($this->Auth->user('role') == 'Admin'){
                    throw new NotFoundException();
                }
            }
elseif(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'manager'){
                if($this->Auth->user('role') == 'manager'){
                    throw new NotFoundException();
                }
            }

mais je pense que je me plante quelque part.

merci de votre aide

Gilles

1 réponse


Deux solutions :

  • Il s'agit d'une authentification un peu plus complexe que celle du tuto et il te faudra utiliser les ACL (Access Control List)

  • Tu crées crées la fonction isAuthorized dans ton appController dans laquelle tu autorise les admin a tout faire

    public function isAuthorized($user) {
    // admin accède à tout
    if (isset($user'role']) && $user'role'] === 'admin') {
    return true;
    }
    // accès a rien par défaut
    return false;
    }
    public function beforeFilter() {
    //ici toutes les fonctions autorisée aux simples visiteurs non connectés,
    $this->Auth->allow('action_publique_1', 'action_publique_2');
    }

Et dans ce cas, tu dois définir dans chaque controller une fonction isAuthorized qui traite plus spécifiquement les droits

public function isAuthorized($user) {
    // si la fonction return true, l'utilisateur a accès
    if ($this->action === 'action_pou_manager' && $user'role']==='manager') {
        return true;
    }

    //ici ca return false si l'utilisateur n'est pas admin donc accès refusé, comme défini dans appController
    return parent::isAuthorized($user);
}

A ta place je passerais par les ACL, plus facile à maintenir