Hoy comencé a trabajar sistema utilizando CakePHP en el cual necesito un control de acceso para distinguir entre dos usuarios, un administrador y un usuario normal, no quise usar ACL debido a lo básico de necesidad asà que me puse a desarrollar mi propio sistema de control de acceso, con una pequeña variante en el software.
La solución es la siguiente:
En mi app_controller.php
function beforeFilter() {
if($this->Session->check("Auth.User")) {
if($this->_permisos($this->params,$this->Session->read("Auth.User.group_id")) == false) {
$this->Session->setFlash("No tienes permiso para ingresar a esta area");
$this->redirect("/");
}
}
}
function _permisos($params,$group) {
$normal_permitido = array(
'users' => array(),
'tickets'=>array('add','view','index'),
'comments'=>array('add','view','index'),
'groups' => array(),
'types' => array(),
'subareas' => array(),
'areas' => array(),
'pages' => array('display')
);
if($group != 1) {
if(array_key_exists($params["controller"],$normal_permitido)) {
if(in_array($params["action"], $normal_permitido[$params["controller"]])) {
return true;
}
else {
return false;
}
}
else {
return false;
}
} else {
return true;
}
}
La idea es super simple si el usuario no es administrador solo podrá acceder a ciertas acciones los controladores. En el arreglo $normal_permitido se almacenan los controladores y las acciones que tiene permitido visitar.
Ojala les sirva.
Happy baking!