Bonjour,

j'ai mis en place un site via la version de CakePHP 2.5, avec le plugin ACLManager pour gérer les authorisations d'accès aux controllers suivant les rôle de mes utilisateurs. Je me suis inspiré des exemples de la doc.
Je voudrais tester la version 3.0, mais appremment les ACL ne sont plus gérer de la même manière mais via un pluggin (pas très stable pour le moment).
Je voulais savoir si il était possible de gérer ses autorisations autrement par exemple via un beforefilter dans l'appcontroller() ?
J'ai bien trouver quelques exemples mais je n'ai pas trouvé d'exemple qui dit comment indiqué les droits d'accès d'un rôle à une action du controller.

Si vous avez des pistes, je suis preneur.
Merci d'avance.

5 réponses


Anthony COUE
Auteur
Réponse acceptée

Pour clôturer cette discussion :

Dans mon Appcontroller :
public function beforeFilter(Event $event)
{
$this->Auth->deny();
$this->Auth->config('authorize', ['Controller']);
//$this->Auth->config('authorize', ['Actions','Controller']);

    $this->Auth->config('authError', 'Vous ne disposez pas des droits nécessaires.');
    $this->Auth->config('unauthorizedRedirect', $this->referer(['controller' => 'pages','action' => 'permission']));
}

public function isAuthorized($user)
{
    // Admin peuvent acceder a chaque action
    if (isset($user['role']) && $user['role'] === 'admin') {
        return true;
    }

    // Par defaut refuser
    return false;
}

Et dans mes controller par exemple UsersController :
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->Auth->allow(['activate', 'login', 'password']);
}

public function isAuthorized($user)
{               
    // Droits de tous les utilisateurs connectes sur les actions
    if(in_array($this->request->action, ['logout','compte'])){
        return true;
    } 

    if(in_array($this->request->action, ['index'])){
        if (isset($user['role']) && $user['role'] === 'autrerole') {
            return true;
        }
    }

    return parent::isAuthorized($user);
}

Voilà , si des besoins n'hésitez pas :)

Bonjour,

Le plugin de Cake3 fonctionne exactemenet pareil que celui de Cake2. Il te reste juste à porter le plugin ACLManager sur Cake3 et voilà.

Merci de ta réponse.
Je voulais surtout savoir si il était aisé de gérer les droits d'accès aux Controller/Action via un BeforeFilter, à la manière des pluggin ACL. Histoire d'avoir la main et de ne pas dépendre d'un pluggin. Je vais continuer à fouiller.

C'est en effet sur cette partie que je vais m'attarder.
Reste à trouver comment lier mes rôles/groupes à mes authorisations.