Bonjour,
Voila je rencontre un petit problème avec mon code.
Je cherche à centraliser dans bootstrap les actions/controllers auxquels les utilisateurs de mon site peuvent accéder en fonction de leur rang.
Je précise que je ne souhaite pas utiliser les ACL car trop lourd à mettre en place et dans mon cas les authorizations n'évolueront pas trop.
J'ai donc déclaré un tableau dans bootstrap.php qui ressemble à cela:
Configure::write('allow',array(
"Users"=>array("connectAs"=>array("0"=>True,
"1"=>True,
),
"voir"=>array("0"=>True,
"1"=>True,
),
"changePassword"=>array("0"=>True,
"1"=>True,
),
"recruter"=>array("1"=>True),
"index"=>array("1"=>True),
"edit"=>array("1"=>True),
"add"=>array("1"=>True)
),
"Annonces"=> array("remonte"=>array("0"=>True,
"1"=>True,
"2"=>True,
"3"=>True,
)
),
"Trainings"=> array(
"index"=>array("1"=>True),
"view"=>array("1"=>True),
"add"=>array("1"=>True),
"edit"=>array("1"=>True),
"delete"=>array("1"=>True)
),
Et dans le beforeFilter du AppController j'autorise ou pas l'action:
public function beforeFilter(){
if (empty($this->request->params['requested']) and Configure::read("enable_action_filter")==True) {
if(!in_array($this->action,array("login","logout",'','home')))
//if($this->action != "login" or $this->action != "logout")
{
$usr=$this->Session->read('Auth.User');
if(isset($usr))
{
$allows = Configure::read("allow");
$admin = $this->Session->read('Auth.User.admin');
$rang = $this->Session->read('Auth.User.rang');
if($admin!=true)
{
if(!isset($allows[$this->name][$this->action]))
{
//debug("here");die();
$this->Session->setFlash('Désolé vous ne pouvez pas accéder à cette fonctionnalité','notif',array("type"=>"error"));
$this->redirect("/");
$this->render(false);
debug("ici");
}
else
{
if(!isset($allows[$this->name][$this->action][$rang]))
{
$this->Session->setFlash('Désolé vous ne pouvez pas accéder à cette fonctionnalité','notif',array("type"=>"error"));
//$this->redirect("/");
$this->render(false);
debug("ici2");
}
}
}
}
}
}
}
Ca fonctionne bien en terme d'interdiction des actions, par contre mon site mouline beaucoup plus... alors que je suis en local.
Des que je désactive ce mode de filtre, les pages s'affichent bcp plus rapidement...
avez vous une idée ?
Merci d'avance, bonne journée