Zend_Acl

1,807 views
1,725 views

Published on

Breve resumen del manual de zend

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,807
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Zend_Acl

  1. 1. Resumen Zend_Acl del manual de zend (02/09/2010)
  2. 2. Introducción <ul><li>Zend_Acl provee una ligera y flexible implementación de lista de control de acceso (ACL). </li></ul><ul><li>resource: Es un objeto al cual el acceso es controlado. </li></ul><ul><li>role: Es un objeto que puede solicitar acceso a un recurso. </li></ul>
  3. 3. Resources <ul><li>Zend_Acl ofrece  Zend_Acl_Resource que es  una básica implementación de su interfaz  Zend_Acl_Resource_Interface. </li></ul><ul><li>Zend_Acl ofrece una estructura de arbol al cual multiples recursos pueden ser agregados. </li></ul><ul><li>Por ejemplo. se puede asignar permiso a cada casa de una ciudad o simplemente asignar permiso a toda la ciudad. </li></ul><ul><li>Un recurso solo puede heredar de un recurso padre y este a su vez de su padre. </li></ul>
  4. 4. Roles <ul><li>Zend_Acl ofrece  Zend_Acl_Role que es  una básica implementación de su interfaz  Zend_Acl_Role_Interface. </li></ul><ul><li>En Zend_Acl un rol puede heredar de uno o mas padres. </li></ul><ul><li>Por ejemplo un rol &quot;sally&quot; puede pertenecer a uno o mas roles padre como &quot;editor&quot; y &quot;administrador&quot;. </li></ul><ul><li>El desarrollador puede asignar permisos al &quot;editor&quot; y &quot;administrador&quot; separadamente y &quot;sally&quot; heredará los permisos de ambos roles sin necesidad de asignar permisos directamente a &quot;sally&quot;. </li></ul>
  5. 5. Heredar de varios Roles <ul><li>$acl  =  new  Zend_Acl () ; </li></ul><ul><li>$acl -> addRole ( new  Zend_Acl_Role ( 'guest' )) </li></ul><ul><li>     -> addRole ( new  Zend_Acl_Role ( 'member' )) </li></ul><ul><li>     -> addRole ( new  Zend_Acl_Role ( 'admin' )) ; </li></ul><ul><li>$parents  =  array ( 'guest' ,  'member' ,  'admin' ) ; </li></ul><ul><li>//si $parents tiene un solo elemento 'guest' se puede usar </li></ul><ul><li>//$acl->addRole( new  Zend_Acl_Role('someUser'), 'guest'); </li></ul><ul><li>$acl -> addRole ( new  Zend_Acl_Role ( 'someUser' ) ,  $parents ) ; </li></ul><ul><li>$acl -> add ( new  Zend_Acl_Resource ( 'someResource' )) ; </li></ul><ul><li>//se puede usar $acl->allow('member', null); tiene permiso a todos los recursos </li></ul><ul><li>$acl -> deny ( 'guest' ,  'someResource' ) ; </li></ul><ul><li>$acl -> allow ( 'member' ,  'someResource' ) ; </li></ul><ul><li>echo   $acl -> isAllowed ( 'someUser' ,  'someResource' )  ?  'allowed'  : 'denied' ; </li></ul>
  6. 6. Heredar de varios Roles <ul><li>Puesto que no se asigno directamente a &quot;someUser&quot; permiso a &quot;someResource&quot; entonces Zend_Acl busca los permisos de los roles padre de &quot;someUser&quot;. </li></ul><ul><li>$parents  =  array ( 'guest' ,  'member' ,  'admin' ) ;   </li></ul><ul><li>... </li></ul><ul><li>$acl -> deny ( 'guest' ,  'someResource' ) ; </li></ul><ul><li>$acl -> allow ( 'member' ,  'someResource' ) ; </li></ul><ul><li>Primero el rol admin es evaluado=>no se le asigno permiso </li></ul><ul><li>Luego el rol member es evaluado=>si tiene permiso </li></ul><ul><li>Luego hace un Break. </li></ul><ul><li>El orden del array $parents es muy importante.   </li></ul>
  7. 7. Consultando permisos <ul><li>Si un rol tiene permisos asignados </li></ul><ul><li>$acl -> deny ( 'guest' ,  'someResource' ) ; </li></ul><ul><li>$acl -> allow ( 'member' ,  'someResource', array ( 'add' ,  'edit' )) ; </li></ul><ul><li>echo   $acl -> isAllowed ( ' </li></ul><ul><li>guest' ,  'someResource' )  ?  'allowed'  : 'denied' ; </li></ul><ul><li>//imprime denied </li></ul><ul><li>echo   $acl -> isAllowed ( ' </li></ul><ul><li>member', ' someResource ',  'add' )  ?   &quot;allowed&quot;  :  &quot;denied&quot; ; </li></ul><ul><li>//imprime allowed </li></ul>
  8. 8. Quitando permisos <ul><li>$acl -> removeDeny ( 'guest' ,  'someResource' ) ; </li></ul><ul><li>$acl -> removeAllow ( 'member' ,  'someResource','add' ); </li></ul>
  9. 9. Guardando permisos <ul><li>Zend_Acl es serializable con la funcion de  PHP's  » serialize()   </li></ul><ul><li>y la cadena resultante se puede guardar en un archivo, en una base de datos, donde sea. </li></ul>
  10. 10. Permisos Condicionales <ul><li>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. </li></ul><ul><li>Otro ejemplo seria denegar el acceso a un recurso si la IP entrante ha sido marcado como una fuente de abuso. </li></ul><ul><li>Zend_Acl tiene soporte para </li></ul><ul><li>permisos </li></ul><ul><li>permisos condicionales con su interfaz  Zend_Acl_Assert_Interface  del cual el desarrollador debe implementar el metodo  assert() </li></ul>
  11. 11. Permisos Condicionales <ul><li>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      } } </li></ul>
  12. 12. Permisos Condicionales <ul><li>$acl  =  new  Zend_Acl (); </li></ul><ul><li>$acl -> allow ( null ,  null ,  null ,  new  CleanIPAssertion ()); </li></ul>

×