Bonjour,

J'ai une variable « admin ». Si elle est supérieur à 0, il est alors administrateur.

J'aimerais donc que le mon URL « localhost/monsite/admin » soit autorisé d'accès qu'aux administrateurs.

Le soucis est que ça ne marche pas.

Voici le AppController :

class AppController extends Controller {
    public $helpers = array('Session', 'Html');
    public $components = array('Session',
        'Auth' => array(
            'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'pages', 'action' => 'index'),
            'authError' => 'Vous n\'êtes pas autorisé à accéder à cette page.',
            'authenticate' => array(
                'Form' => array(
                    'scope' => array('User.active' => 1)  
                )
            )
        )
    ); 
    public function beforeFilter() {
        Security::setHash('md5');
        $this->Auth->loginAction = array('controller'=> 'users', 'action' => 'login', 'admin' => false);
        if(!isset($this->request->params'prefix'])) {
            $this->Auth->allow(); 
        }
        if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
            $this->layout = 'admin';
        }   
    }
    public function isAuthorized() {
        $user = $this->Auth->user();
        if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin') {
            if($user'User']'admin'] >= 1) {
                return true;
            }
            return false;
        }
    }
}

J'ai quand même accès à l'administration même si la variable « admin » = 0 ou 1.

Merci de votre aide.

4 réponses


Kareylo
Réponse acceptée

Essaies sans le return

Edit : Oula, j'ai dit de la merde. C'est logique que ça te retourne une erreur 404 (throw new NotFoundException()). Il faut que tu te logues en tant qu'administrateur et que tu change le code pour qu'il fonctionne avec ton système. (Personnellement, j'utilise un système de groupe et un $belongsTo)

ici, un aperçu de mon système à toi d'adapter selon tes besoin:

public function beforeFilter(){
        if(isset($this->params'prefix']) && $this->params'prefix'] == 'admin'){
            if($this->Session->read('Auth.User.group_id') > 3)
                throw new NotFoundException();
            $this->layout = 'admin';
        }
    }

Essaies ceci :

public function beforeFilter() {
        Security::setHash('md5');
        $this->Auth->loginAction = array('controller'=> 'users', 'action' => 'login', 'admin' => false);
        if(!isset($this->request->params'prefix'])) {
            $this->Auth->allow();
        }
        if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
            if(!$this->Session->read('Auth.User.admin'))
                return throw new NotFoundException();
            $this->layout = 'admin';
        }  
    }

Et retire ta fonction isAuthorized.

En gros, ce code va aller vérifier dans la session si l'utilisateur est admin (admin à 1 dans la table Users dans ta base de données) et s'il ne l'est pas, il renvoit une page d'erreur.

DexX
Auteur

Bonjour,

Cela me retourne ceci :

Not Found
Error: The requested address '/MSRP/admin' was not found on this server.
DexX
Auteur

Merci, cela fonctionne ;)