Zend_Acl-Refining.xml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 18389 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.acl.refining">
  5. <title>Perfeccionamiento de los controles de acceso</title>
  6. <sect2 id="zend.acl.refining.precise">
  7. <title>Definir mejor los controles de acceso</title>
  8. <para> El <acronym>ACL</acronym> básico según lo definido en la <link
  9. linkend="zend.acl.introduction"> sección anterior </link>
  10. demuestra cómo los diversos privilegios se pueden otorgar sobre todo
  11. el <acronym>ACL</acronym> (todos los recursos). En la práctica, sin
  12. embargo, los controles de acceso tienden a tener excepciones y
  13. diversos grados de complejidad. <classname>Zend_Acl</classname>
  14. permite lograr estos refinamientos de una manera sencilla y
  15. flexible. </para>
  16. <para> Para el <acronym>CMS</acronym> del ejemplo se ha determinado que,
  17. si bien el grupo 'staff' cubre las necesidades de la gran mayoría de
  18. usuarios, hay una necesidad de un nuevo grupo 'marketing' que
  19. requiere el acceso al boletín de noticias y las últimas noticias en
  20. el CMS. El grupo es bastante auto suficiente y tendrá la capacidad
  21. de publicar y de archivar los boletines de noticias y las últimas
  22. noticias. </para>
  23. <para> Primero revisamos el registro del rol para reflejar estos
  24. cambios. Hemos determinado que el grupo 'marketing' tiene los mismos
  25. permisos básicos que 'staff', así que definimos 'marketing' de tal
  26. manera que herede los permisos de 'staff': </para>
  27. <programlisting language="php"><![CDATA[
  28. // El nuevo grupo de Marketing hereda los permisos de Staff
  29. $acl->addRole(new Zend_Acl_Role('marketing'), 'staff');
  30. ]]></programlisting>
  31. <para> A continuación, la nota que por encima de los controles de acceso
  32. se refieren a recursos específicos (por ejemplo, "boletín
  33. informativo", "últimas noticias", "anuncio de noticias"). Ahora
  34. añadimos estos recursos: </para>
  35. <programlisting language="php"><![CDATA[
  36. // Crear recursos para las reglas
  37. // newsletter
  38. $acl->addResource(new Zend_Acl_Resource('newsletter'));
  39. // news
  40. $acl->addResource(new Zend_Acl_Resource('news'));
  41. // Últimas Noticias
  42. $acl->addResource(new Zend_Acl_Resource('latest'), 'news');
  43. // anuncio de noticias
  44. $acl->addResource(new Zend_Acl_Resource('announcement'), 'news');
  45. ]]></programlisting>
  46. <para> Entonces es simplemente una cuestión de la definición de estas
  47. normas más específicas en ámbitos de la <acronym>ACL</acronym>: </para>
  48. <programlisting language="php"><![CDATA[
  49. //
  50. Marketing debe ser capaz de archivar y publicar boletines informativos y
  51. // las últimas noticias
  52. $acl->allow('marketing',
  53. array('newsletter', 'latest'),
  54. array('publish', 'archive'));
  55. // Staff (y marketing, por herencia), se le denega el permiso a
  56. // revisar las últimas noticias
  57. $acl->deny('staff', 'latest', 'revise');
  58. // Todos (incluyendo los administradores) tienen permiso denegado para
  59. // archivar anuncios y noticias
  60. $acl->deny(null, 'announcement', 'archive');
  61. ]]></programlisting>
  62. <para> Ahora podemos consultar el <acronym>ACL</acronym> con respecto a
  63. los últimos cambios: </para>
  64. <programlisting language="php"><![CDATA[
  65. echo $acl->isAllowed('staff', 'newsletter', 'publish') ?
  66. "allowed" : "denied";
  67. // denegado
  68. echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
  69. "allowed" : "denied";
  70. // permitido
  71. echo $acl->isAllowed('staff', 'latest', 'publish') ?
  72. "allowed" : "denied";
  73. // denegado
  74. echo $acl->isAllowed('marketing', 'latest', 'publish') ?
  75. "allowed" : "denied";
  76. // permitido
  77. echo $acl->isAllowed('marketing', 'latest', 'archive') ?
  78. "allowed" : "denied";
  79. // permitido
  80. echo $acl->isAllowed('marketing', 'latest', 'revise') ?
  81. "allowed" : "denied";
  82. // denegado
  83. echo $acl->isAllowed('editor', 'announcement', 'archive') ?
  84. "allowed" : "denied";
  85. // denegado
  86. echo $acl->isAllowed('administrator', 'announcement', 'archive') ?
  87. "allowed" : "denied";
  88. // denegado
  89. ]]></programlisting>
  90. </sect2>
  91. <sect2 id="zend.acl.refining.removing">
  92. <title>Eliminar los controles de acceso</title>
  93. <para> Para eliminar una o más reglas <acronym>ACL</acronym>,
  94. simplemente utilice el método <methodname>removeAllow()</methodname>
  95. o <methodname>removeDeny()</methodname>. Al igual que con
  96. <methodname>allow()</methodname> y
  97. <methodname>deny()</methodname>, puede utilizar un valor
  98. <constant>NULL</constant> para indicar que el método es
  99. aplicable a todos los roles, recursos y/o privilegios: </para>
  100. <programlisting language="php"><![CDATA[
  101. // Elimina la prohibición de leer las últimas noticias de staff (y marketing,
  102. // por herencia)
  103. $acl->removeDeny('staff', 'latest', 'revise');
  104. echo $acl->isAllowed('marketing', 'latest', 'revise') ?
  105. "allowed" : "denied";
  106. // permitido
  107. // Elimina la autorización para publicar y archivar los boletines
  108. // marketing
  109. $acl->removeAllow('marketing',
  110. 'newsletter',
  111. array('publish', 'archive'));
  112. echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
  113. "allowed" : "denied";
  114. // denegado
  115. echo $acl->isAllowed('marketing', 'newsletter', 'archive') ?
  116. "allowed" : "denied";
  117. // denegado
  118. ]]></programlisting>
  119. <para> Los privilegios pueden ser modificados de manera incremental como
  120. se ha indicado anteriormente, pero un valor
  121. <constant>NULL</constant> para los privilegios anula tales
  122. cambios incrementales: </para>
  123. <programlisting language="php"><![CDATA[
  124. //Permitir al grupo de "marketing" todos los permisos a las últimas noticias
  125. $acl->allow('marketing', 'latest');
  126. echo $acl->isAllowed('marketing', 'latest', 'publish') ?
  127. "allowed" : "denied";
  128. //permitido
  129. echo $acl->isAllowed('marketing', 'latest', 'archive') ?
  130. "allowed" : "denied";
  131. //permitido
  132. echo $acl->isAllowed('marketing', 'latest', 'anything') ?
  133. "allowed" : "denied";
  134. // permitido
  135. ]]></programlisting>
  136. </sect2>
  137. </sect1>