Bonjour,
Je suis en train de monter un site multi-language avec la gestion du backoffice avec ACL. Mais j'ai un petit soucis.
Dans le beforeFilter de mon app_controller j'ai une partie pour la gestion des ACL et une autre pour le i18n (suivi les tutoriels).
function beforeFilter(){
//Configue i18nComponent
if(!$this->Session->read('User.language')){
$this->Session->write('User.language',Configure::read('Config.language'));
}
if(isset($this->params'language'])){
if(in_array($this->params'language'],Configure::read('Config.languages'))){
$this->Session->write('User.language',$this->params'language']);
}
}
Configure::write('Config.language',$this->Session->read('User.language'));
$this->params'language'] = $this->Session->read('User.language');
if(isset($this->params'prefix']) && $this->params'prefix'] == 'admin' && $this->action != 'admin_login' && $this->action != 'admin_logout') {
//Configure AuthComponent
$this->Auth->authorize = 'actions';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'Dashboard', 'action' => 'admin_index');
$this->Auth->loginRedirect = array('controller' => 'Dashboard', 'action' => 'admin_index');
} else {
$this->Auth->allow();
}
}
Le soucis est que les deux ensemble il m'est impossible de me connecter à mon back office. Si je supprimer la gestion des i18n du beforeFilter, à ce moment là, la connection remarche.
J'ai essayé de mettre des conditions mais ça marche toujours pas.
Comment je pourrais modifié ce code pour que les deux marchent ensemble.
Une autre petite question. Sur ce site le menu est en flash. Pour le moment j'ai mis deux liens dans la partie "html" pour passer du fre et eng avec ce code :
<?php echo $html->link('Français', array('language'=>'fre', 'controller' => 'homes', 'action' => 'index')); ?>
<?php echo $html->link('English', array('language'=>'eng', 'controller' => 'homes', 'action' => 'index')); ?>
Mais comment le faire dans du flash?
Merci d'avance
J'ai résolu mon problème en faisant ceci:
//users_controller.php
function beforeFilter() {
//parent::beforeFilter();
$this->Auth->authorize = 'actions';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'pages', 'action' => 'index');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'admin');
$this->Auth->authError = "No Right";
$this->Auth->loginError = "Fail Login";
$this->Auth->allow('login', 'logout');
}
Au lieu d'avoir
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('login', 'logout');
}
Salut, j'ai le même problème que toi, j'ai un site fonctionnel avec gestion des ACLs, et tous... Je décide de suivre le tuto vidéo pour faire un site multilingue, cela marche, sauf que je n'ai plus aucun accès au panel d'administration, aucun moyen de me connecter. Si quelqu'un aurait une solution s'il vous plaît.
J'ai résolu mon problème avec ce code:
function beforeFilter(){
//Configue i18nComponent
if(!isset($this->params'prefix'])) {
if(!$this->Session->read('User.language')){
$this->Session->write('User.language',Configure::read('Config.language'));
}
if(isset($this->params'language'])){
if(in_array($this->params'language'],Configure::read('Config.languages'))){
$this->Session->write('User.language',$this->params'language']);
}
}
Configure::write('Config.language',$this->Session->read('User.language'));
$this->params'language'] = $this->Session->read('User.language');
}
if(isset($this->params'prefix']) && $this->params'prefix'] == 'admin' && $this->action != 'admin_login' && $this->action != 'admin_logout') {
//Configure AuthComponent
$this->Auth->authorize = 'actions';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'Dashboard', 'action' => 'admin_index');
$this->Auth->loginRedirect = array('controller' => 'Dashboard', 'action' => 'admin_index');
} else {
$this->Auth->allow();
}
}
En espérant que ça pourra d'aider sinon n'hésite pas.
Salut, je viens de tester ta solution, je n'ai toujours pas accès au panel, je me loggue sur localhost:8888/users/login, celle-ci me redirige toujours vers la même page, celle de login.
En supprimant la fonction "if" pour la gestion du i18n, tous remarche comme avant, accès à tous les fonctionnalités du panel admin avec les utilisateurs, si je remet le i18n, plus rien.
Et si à la place de :
if(!isset($this->params'prefix'])) {
tu mets :
if(isset($this->layout'nom de layout du front office'])) {
Ça fait pareil?
Toujours pas.
Dis moi à quoi te sers cette ligne?
if(isset($this->params'prefix']) && $this->params'prefix'] == 'admin' && $this->action != 'admin_login' && $this->action != 'admin_logout')
Cette ligne me sert à configurer le comp Auth lorsqu'il y a un prefixe ,quand le prefixe est admin, quand l'action n'est pas la vue admin_login et admin_logout.
Comme ça la configuration ne se fait que lorsque j'en ai besoin.
Okay, sinon mon problème persiste toujours:
Je ne vois pas le problème, vraiment pas.
Edit 1:
Ce qui est bizarre, c'est que j'accède au panel par:
localhost:8888/users/login
et qu'il me redigire vers
localhost:8888/fre/users/login
De plus, je viens de tester en remplaçant
if (!isset ($this->params'prefix']))
par
if (!isset ($this->params'language']))
Cela ne fonctionne toujours pas.