Diferencia entre revisiones de «ACL Configurado a Traves de un Archivo ini»

De KumbiaPHP Framework Wiki
Línea 5: Línea 5:
 
A traves de este tutorial podemos ver como se puede trabajar una lista de control de acceso por medio de un archivo .ini , haciendo asi mas facil configurar los roles y los privilegios de los mismos en una aplicacion.
 
A traves de este tutorial podemos ver como se puede trabajar una lista de control de acceso por medio de un archivo .ini , haciendo asi mas facil configurar los roles y los privilegios de los mismos en una aplicacion.
  
Nos basaremos en el uso de la libreria '''Acl2''' de KumbiaPHP, la cual se encarga de manejar de manera sencilla
+
Nos basaremos en el uso de la libreria '''Acl2''' de KumbiaPHP.
 +
 
 +
=== Creando una libreria para manejar las listas de control de acceso ===
 +
 
 +
Esta clase nos permitira llevar un control de los distintos tipos de usuario a travez de un archivo.ini, la clase se llamará MyAcl y estará hubicada en el directorio: '''proyecto/app/libs/my_acl.php'''
 +
 
 +
<source lang=php>
 +
<?php
 +
 
 +
class MyAcl {
 +
 
 +
    /**
 +
    *
 +
    * @var SimpleAcl
 +
    */
 +
    protected $_acl = null;
 +
 
 +
    /**
 +
    * arreglo con los templates para cada usuario
 +
    *
 +
    * @var array
 +
    */
 +
    protected $_templates = array();
 +
 
 +
    public function __construct($archivo = 'privilegios') {
 +
        $config = Config::read($archivo, true);
 +
 
 +
        $this->_acl = Acl2::factory();
 +
 
 +
        $this->_establecerRoles($config['roles']);
 +
 
 +
        foreach ($config['roles'] as $rol => $padres) {
 +
            $recursos = $config[$rol];
 +
            $this->_establecerPermisos($rol, $recursos);
 +
        }
 +
 
 +
        $this->_establecerTemplates($config['templates']);
 +
    }
 +
 
 +
    protected function _establecerRoles($roles) {
 +
 
 +
        foreach ($roles as $rol => $padres) {
 +
            $this->_acl->user($rol, array($rol));
 +
            if ($padres) {
 +
                $padres = explode(',', $padres);
 +
                $padres = is_array($padres) ? $padres : array($padres);
 +
                $this->_acl->parents($rol, $padres);
 +
            }
 +
        }
 +
    }
 +
 
 +
    protected function _establecerPermisos($rol, $recursos) {
 +
        $urls = array();
 +
        foreach ($recursos as $recurso => $acciones) {
 +
            if ($acciones == '*') {
 +
                $urls[] = "$recurso/*";
 +
            } else {
 +
                foreach (explode(',', $acciones) as $accion) {
 +
                    $urls[] = "$recurso/$accion";
 +
                }
 +
            }
 +
            $this->_acl->allow($rol, $urls);
 +
        }
 +
 
 +
        if (empty($recursos)) {
 +
            $urls[] = "*";
 +
            $this->_acl->allow($rol, $urls);
 +
        }
 +
    }
 +
 
 +
    public function check($usuario, $modulo, $controlador, $accion) {
 +
        if ( isset ($this->_templates["$usuario"]) ){
 +
            View::template("{$this->_templates["$usuario"]}");
 +
        }
 +
        if ($modulo) {
 +
            $recurso1 = "$modulo/$controlador/$accion";
 +
            $recurso2 = "$modulo/$controlador/*";  //por si tiene acceso a todas las acciones
 +
            $recurso3 = "*";  //por si tiene acceso a todo el sistema
 +
        } else {
 +
            $recurso1 = "$controlador/$accion";
 +
            $recurso2 = "$controlador/*"; //por si tiene acceso a todas las acciones
 +
            $recurso3 = "*";  //por si tiene acceso a todo el sistema
 +
        }
 +
        return $this->_acl->check($recurso1, $usuario) ||
 +
        $this->_acl->check($recurso2, $usuario) ||
 +
        $this->_acl->check($recurso3, $usuario);
 +
    }
 +
 
 +
    protected function _establecerTemplates($templates){
 +
        foreach ($templates as $rol => $template){
 +
            $this->_templates["$rol"] = $template ;
 +
        }
 +
    }
 +
 
 +
}
 +
 
 +
</source>
 +
 
 +
==== Descripcion y uso de la libreria MyAcl ====
 +
 
 +
La libreria MyAcl se encarga de controlar los accesos de los usuarios en la aplicacion, verificando si cada usuario tiene los permisos necesarios para acceder ó no a ciertos modulos de dicha aplicacion.
  
 
----
 
----
  
 
Realizado por: Manuel Aguirre (manuel_j555)
 
Realizado por: Manuel Aguirre (manuel_j555)

Revisión del 16:20 29 sep 2011


Descripción

A traves de este tutorial podemos ver como se puede trabajar una lista de control de acceso por medio de un archivo .ini , haciendo asi mas facil configurar los roles y los privilegios de los mismos en una aplicacion.

Nos basaremos en el uso de la libreria Acl2 de KumbiaPHP.

Creando una libreria para manejar las listas de control de acceso

Esta clase nos permitira llevar un control de los distintos tipos de usuario a travez de un archivo.ini, la clase se llamará MyAcl y estará hubicada en el directorio: proyecto/app/libs/my_acl.php

<?php

class MyAcl {

    /**
     *
     * @var SimpleAcl
     */
    protected $_acl = null;

    /**
     * arreglo con los templates para cada usuario
     *
     * @var array 
     */
    protected $_templates = array();

    public function __construct($archivo = 'privilegios') {
        $config = Config::read($archivo, true);

        $this->_acl = Acl2::factory();

        $this->_establecerRoles($config['roles']);

        foreach ($config['roles'] as $rol => $padres) {
            $recursos = $config[$rol];
            $this->_establecerPermisos($rol, $recursos);
        }

        $this->_establecerTemplates($config['templates']);
    }

    protected function _establecerRoles($roles) {

        foreach ($roles as $rol => $padres) {
            $this->_acl->user($rol, array($rol));
            if ($padres) {
                $padres = explode(',', $padres);
                $padres = is_array($padres) ? $padres : array($padres);
                $this->_acl->parents($rol, $padres);
            }
        }
    }

    protected function _establecerPermisos($rol, $recursos) {
        $urls = array();
        foreach ($recursos as $recurso => $acciones) {
            if ($acciones == '*') {
                $urls[] = "$recurso/*";
            } else {
                foreach (explode(',', $acciones) as $accion) {
                    $urls[] = "$recurso/$accion";
                }
            }
            $this->_acl->allow($rol, $urls);
        }

        if (empty($recursos)) {
            $urls[] = "*";
            $this->_acl->allow($rol, $urls);
        }
    }

    public function check($usuario, $modulo, $controlador, $accion) {
        if ( isset ($this->_templates["$usuario"]) ){
            View::template("{$this->_templates["$usuario"]}");
        }
        if ($modulo) {
            $recurso1 = "$modulo/$controlador/$accion";
            $recurso2 = "$modulo/$controlador/*";  //por si tiene acceso a todas las acciones
            $recurso3 = "*";  //por si tiene acceso a todo el sistema
        } else {
            $recurso1 = "$controlador/$accion";
            $recurso2 = "$controlador/*"; //por si tiene acceso a todas las acciones
            $recurso3 = "*";  //por si tiene acceso a todo el sistema
        }
        return $this->_acl->check($recurso1, $usuario) ||
        $this->_acl->check($recurso2, $usuario) ||
        $this->_acl->check($recurso3, $usuario);
    }

    protected function _establecerTemplates($templates){
        foreach ($templates as $rol => $template){
            $this->_templates["$rol"] = $template ;
        }
    }

}

Descripcion y uso de la libreria MyAcl

La libreria MyAcl se encarga de controlar los accesos de los usuarios en la aplicacion, verificando si cada usuario tiene los permisos necesarios para acceder ó no a ciertos modulos de dicha aplicacion.


Realizado por: Manuel Aguirre (manuel_j555)