@Mikachu, c'est vraiment sympa d'aider. Mais je trouve qu'il aurait été bien que tu montres pourquoi son code ne fonctionne pas et comment tu as résolu son problème.
if($this->request->data'User']'role']=='admin'){
Cela ne peut pas fonctionner car $this->request->data correspond aux données du formulaire, envoyées par la vue. Hors je suppose que tu ne remplis pas le rôle dans le formulaire de connexion (ce qui est normal), donc ta condition est toujours fausse.
if($this->Auth->user('role') === 'admin') {
Lorsque tu es connecté, tu as un tableau qui possède toutes les informations de l'utilisateur. C'est ce tableau qu'utilise Mikachu pour résoudre le problème.
Dernier point :
// pas bon
return $this->redirect('/admin/pages');
//bon
$this->redirect(array('controller' => 'pages', 'action' => 'index', 'admin' => true));
Ton code est fonctionnel, mais dans un soucis de bonnes pratiques de développement, il ne faut pas coder directement l'url. C'est un principe qui peut être un peu compliqué à comprendre quand on ne travaille qu'avec CakePHP, mais en gros, le framework réalise lui même la liaison entre l'url et l'action. Il réalise ceci par défaut si aucune route n'est définie :
Router::connect(
'/{controller}/{action}',
array('controller' => '{controller}', 'action' => '{action}')
);
Si par contre j'ai envie de changer l'url, je pourrais faire ça :
Router::connect(
'/pages/index',
array('controller' => 'users', 'action' => 'index')
);
Et là on peut voir que ton code ne redirigera pas sur l'action voulue alors que le code de Mikachu si.