Zend_Acl

12
Resumen Zend_Acl del manual de zend (02/09/2010)

description

Breve resumen del manual de zend

Transcript of Zend_Acl

Page 1: Zend_Acl

Resumen Zend_Acl

del manual de zend(02/09/2010)

Page 2: Zend_Acl

Introducción

Zend_Acl provee una ligera y flexible implementación de lista de control de acceso (ACL).

resource: Es un objeto al cual el acceso es controlado.role: Es un objeto que puede solicitar acceso a un recurso.

Page 3: Zend_Acl

Resources

Zend_Acl ofrece Zend_Acl_Resource que es una básica implementación de su interfaz Zend_Acl_Resource_Interface.

Zend_Acl ofrece una estructura de arbol al cual multiples recursos pueden ser agregados.

Por ejemplo. se puede asignar permiso a cada casa de una ciudad o simplemente asignar permiso a toda la ciudad.

Un recurso solo puede heredar de un recurso padre y este a su vez de su padre.

Page 4: Zend_Acl

Roles

Zend_Acl ofrece Zend_Acl_Role que es una básica implementación de su interfaz Zend_Acl_Role_Interface.

En Zend_Acl un rol puede heredar de uno o mas padres.

Por ejemplo un rol "sally" puede pertenecer a uno o mas roles padre como "editor" y "administrador".

El desarrollador puede asignar permisos al "editor" y "administrador" separadamente y "sally" heredará los permisos de ambos roles sin necesidad de asignar permisos directamente a "sally".

Page 5: Zend_Acl

Heredar de varios Roles$acl = new Zend_Acl();$acl->addRole(new Zend_Acl_Role('guest'))    ->addRole(new Zend_Acl_Role('member'))    ->addRole(new Zend_Acl_Role('admin'));

$parents = array('guest', 'member', 'admin');//si $parents tiene un solo elemento 'guest' se puede usar//$acl->addRole(new Zend_Acl_Role('someUser'), 'guest');$acl->addRole(new Zend_Acl_Role('someUser'), $parents);

$acl->add(new Zend_Acl_Resource('someResource'));//se puede usar $acl->allow('member', null); tiene permiso a todos los recursos$acl->deny('guest', 'someResource');$acl->allow('member', 'someResource');

echo $acl->isAllowed('someUser', 'someResource') ? 'allowed' :'denied';

Page 6: Zend_Acl

Heredar de varios Roles

Puesto que no se asigno directamente a "someUser" permiso a "someResource" entonces Zend_Acl busca los permisos de los roles padre de "someUser".

$parents = array('guest', 'member', 'admin'); ...$acl->deny('guest', 'someResource');$acl->allow('member', 'someResource');

Primero el rol admin es evaluado=>no se le asigno permisoLuego el rol member es evaluado=>si tiene permisoLuego hace un Break.

El orden del array $parents es muy importante. 

Page 7: Zend_Acl

Consultando permisos

Si un rol tiene permisos asignados$acl->deny('guest', 'someResource');$acl->allow('member', 'someResource',array('add', 'edit'));

echo $acl->isAllowed('guest', 'someResource') ? 'allowed' :'denied';//imprime denied

echo $acl->isAllowed('

member', 'someResource', 'add') ?  "allowed" : "denied";//imprime allowed

Page 8: Zend_Acl

Quitando permisos

$acl->removeDeny('guest', 'someResource');$acl->removeAllow('member', 'someResource','add');

Page 9: Zend_Acl

Guardando permisos

Zend_Acl es serializable con la funcion de PHP's » serialize() 

y la cadena resultante se puede guardar en un archivo, en una base de datos, donde sea.

Page 10: Zend_Acl

Permisos Condicionales

Algunas veces permitir el acceso a un recurso puede depender de varios criterios. Por ejemplo si se desea restringir el acceso a un determinado recurso solo entre las 8:30am y 5:30pm.Otro ejemplo seria denegar el acceso a un recurso si la IP entrante ha sido marcado como una fuente de abuso.

Zend_Acl tiene soporte para permisos permisos condicionales con su interfaz Zend_Acl_Assert_Interface del cual el desarrollador debe implementar el metodo assert()

Page 11: Zend_Acl

Permisos Condicionales

class CleanIPAssertion implements Zend_Acl_Assert_Interface{    public function assert(Zend_Acl $acl,                           Zend_Acl_Role_Interface $role = null,                           Zend_Acl_Resource_Interface $resource = null,                           $privilege = null)    {        return $this->_isCleanIP($_SERVER['REMOTE_ADDR']);    }     protected function _isCleanIP($ip)    {        // ...debe retornar true o false    }}

Page 12: Zend_Acl

Permisos Condicionales

$acl = new Zend_Acl();$acl->allow(null, null, null, new CleanIPAssertion());