2009-04-20 2 views
4

J'essaie d'utiliser la méthode isAuthorized() pour faire une vérification d'un drapeau admin, mais la fonction ne semble jamais appelée. Même lorsque je mets la fonction à toujours retourner false, cela permet à n'importe quel utilisateur. Il semble juste que ce n'est pas appelé. Dois-je faire quelque chose de plus que de configurer $ this-> Auth-> authorize = 'controller'?cakephp isAuthorized() n'étant pas appelé

de /app/app_controller.php

class AppController extends Controller 
{ 

var $components = array('Auth'); 

function beforeFilter() 
{ 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->loginRedirect = array('controller' => 'pages', 'display' => 'home'); 
    $this->Auth->logoutRedirect = '/'; 
    $this->Auth->authorize = 'controller'; 
    $this->Auth->userScope = array('User.active' => 1); 
} 

function isAuthorized() 
{ 
    if (strpos($this->action, "admin_") != false) 
    { 
     if ($this->Auth->user('isAdmin') == '0') 
     { 
      return false; 
     } 
    } 
    return true; 
} 
} 

Répondre

12

Vous devez vérifier si vous remplacez vos paramètres Auth dans votre autre contrôleur.

Tout d'abord, pour vérifier que isAuthorized() est appelé, essayez d'y mettre un debug($this); die; simple.

Si ce n'est pas en train de mourir, vous le remplacerez probablement dans un autre contrôleur (l'appel parent::isAuthorized() est manquant).

Si ce n'est pas le cas, alors vous faites probablement la même chose avec beforeFilter().

+1

s'avère que je remplaçais beforeFilter() et n'appelant pas parent :: beforeFilter() –

-4

vous devez vous assurer que « Auth » est dans le tableau de composants pour ce contrôleur:

$this->components[] = 'Auth'; 

goutte qui dans le constructeur et devrait fonctionner (à moins, bien sûr, pas). Bonne chance!

+0

J'omis depuis le poste d'origine, mais a ajouté dans mon montage, il a toujours été là. –

1

additionnel à la réponse du Dr Hannibal Lecter, il y a une autre raison possible si vous rencontrez ce problème (comme je l'ai fait ...):

Si votre contrôleur est nommé tests_controller, la méthode de mise en service des Auth-Component abandonne sans lancer l'authentification (au moins dans cakePHP 1.3.10 - n'a pas coché 2.x). Donc, assurez-vous que vous nommez jamais un contrôleur tests_controller ...

Extrait du gâteau \ libs \ contrôleur composants \ \ auth.php

function startup(&$controller) { 
    $isErrorOrTests = (
     strtolower($controller->name) == 'cakeerror' || 
     (strtolower($controller->name) == 'tests' && Configure::read() > 0) 
    ); 
    if ($isErrorOrTests) { 
     return true; 
    } 
...