Bonjour,

mon app a 2 espaces membres un pour les commerçants et un pour les acheteurs. mais j'arrive pas à mettre en place ce système dans mon appController.
merci d'avance

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

           if(($this->request->params['controller'] == 'commercants') && ($this->request->params['action'] == 'login')) {
            $this->loadComponent('Auth', [
                'loginAction' => [
                    'controller' => 'commercants',
                    'action' => 'login'
                ],
                'authenticate' => [
                    'Form' => [
                        'fields' => ['username' => 'email','password'=>'password']
                    ]
                ]
                ]);
          }
        elseif(($this->request->params['controller'] == 'producteurs')
            && ($this->request->params['action'] == 'login')) {

        $this->loadComponent('Auth', [
            'loginAction' => [
                'controller' => 'producteurs',
                'action' => 'login'
            ],
            'authenticate' => [
                'Form' => [
                    'fields' => ['username' => 'email','password'=>'password']
                ]
            ]
            ]
        );

        }

4 réponses


Defy
Réponse acceptée

Je te conseille de passer pzr des ACL c'est plus simple pour gerer les groupes

tincode
Auteur

ok @defy merci

moi je le gère autre avec les préfixe. tu peux utiliser un même formulaire pour connecter les deux type et dans ta table user tu as un champ role ou space à toi de voir qui vaut commerçant ou acheteur une fois le user connecter tu le redirige vers son espace appropier avec la valeur role/space

Bonjour,
Voila ce que je fais quand je dois avoir plusieurs utilisateurs sur le site ( admin + user par exemple)
Tu charges d'abord ton component (Auth) dans la methode initialize ( $this->loadComponent('Auth');)

puis dans le beforefilter tu ajoutes le code ci-dessous (pense à déclarer tes routes)

    public function beforeFilter( Event $event ) {

        if ($this->request->param('prefix') && $this->request->param('prefix') == 'admin') {
            $this->Auth->config([
                'authorize' => ['Controller'], // facultatif
                'authenticate' => [
                    'Form' => [
                        'fields' => ['username' => 'mail'],
                        'userModel' => 'Administrators'
                    ],
                ],
                'loginAction' => [
                    'controller' => 'Administrators',
                    'action' => 'login',
                    'prefix' => 'admin',
                ],
                'logoutRedirect' => [
                    'controller' => 'Administrators',
                    'action' => 'login',
                    'prefix' => 'admin',
                ],
                'storage' => [
                    'className' => 'Session',
                    'key' => 'Auth.Admin',
                ],
            ]);
        }else if ($this->request->param('prefix') && $this->request->param('prefix') == 'user') {
            $this->Auth->config([
                'loginAction' => [
                    'controller' => 'Users',
                    'action' => 'login',
                    'prefix'=>false
                ],
                'loginRedirect' => [
                    'controller' => 'Users',
                    'action' => 'index',
                    'prefix'=>'user'
                ],
                'logoutRedirect' => [
                    'controller' => 'Users',
                    'action' => 'login',
                    'prefix'=>false
                ],
                'authenticate'=>[
                    'Form'=>[
                        'fields' => ['username' => 'email'],
                    ]
                    ]
            ]);
        } else {
            $this->Auth->allow();
        }
    }

La clé 'Storage' est très importante car c'est elle qui va permettre de stocker les 2 sessions

ensuite pour acceder aux données de l'admin utilise plutôt $this->request->session()->read('Auth.Admin');

En espérant t'avoir aidé.