CakePHP: Mini control de acceso

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!

One thought on “CakePHP: Mini control de acceso

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.