Zend_Acl-Refining.xml 6.6 KB

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