| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.acl.refining">
- <title>Perfeccionamiento de los controles de acceso</title>
- <sect2 id="zend.acl.refining.precise">
- <title>Definir mejor los controles de acceso</title>
- <para>
- El
- <acronym>ACL</acronym>
- básico según lo definido en la
- <link linkend="zend.acl.introduction"> sección anterior </link>
- demuestra cómo los diversos privilegios se pueden otorgar sobre todo
- el
- <acronym>ACL</acronym>
- (todos los recursos). En la práctica, sin
- embargo, los controles de acceso tienden a
- tener excepciones y
- diversos grados de complejidad.
- <classname>Zend_Acl</classname>
- permite lograr estos refinamientos de una manera sencilla y
- flexible.
- </para>
- <para>
- Para el
- <acronym>CMS</acronym>
- del ejemplo se ha determinado que,
- si bien el grupo 'staff' cubre las necesidades de la
- gran mayoría de
- usuarios, hay una necesidad de un nuevo grupo 'marketing' que
- requiere el
- acceso al boletín de noticias y las últimas noticias en
- el <acronym>CMS</acronym>. El grupo es bastante auto
- suficiente y tendrá la capacidad
- de publicar y de archivar los boletines de noticias y
- las últimas
- noticias.
- </para>
- <para>Primero revisamos el registro del rol para reflejar estos
- cambios. Hemos determinado
- que el grupo 'marketing' tiene los mismos
- permisos básicos que 'staff', así que definimos
- 'marketing' de tal
- manera que herede los permisos de 'staff':</para>
- <programlisting language="php"><![CDATA[
- // El nuevo grupo de Marketing hereda los permisos de Staff
- $acl->addRole(new Zend_Acl_Role('marketing'), 'staff');
- ]]></programlisting>
- <para>A continuación, la nota que por encima de los controles de acceso
- se refieren a
- recursos específicos (por ejemplo, "boletín
- informativo", "últimas noticias", "anuncio de
- noticias"). Ahora
- añadimos estos recursos:</para>
- <programlisting language="php"><![CDATA[
- // Crear recursos para las reglas
- // newsletter
- $acl->addResource(new Zend_Acl_Resource('newsletter'));
- // news
- $acl->addResource(new Zend_Acl_Resource('news'));
- // Últimas Noticias
- $acl->addResource(new Zend_Acl_Resource('latest'), 'news');
- // anuncio de noticias
- $acl->addResource(new Zend_Acl_Resource('announcement'), 'news');
- ]]></programlisting>
- <para>
- Entonces es simplemente una cuestión de la definición de estas
- normas más específicas en
- ámbitos de la
- <acronym>ACL</acronym>
- :
- </para>
- <programlisting language="php"><![CDATA[
- //
- Marketing debe ser capaz de archivar y publicar boletines informativos y
- // las últimas noticias
- $acl->allow('marketing',
- array('newsletter', 'latest'),
- array('publish', 'archive'));
- // Staff (y marketing, por herencia), se le denega el permiso a
- // revisar las últimas noticias
- $acl->deny('staff', 'latest', 'revise');
- // Todos (incluyendo los administradores) tienen permiso denegado para
- // archivar anuncios y noticias
- $acl->deny(null, 'announcement', 'archive');
- ]]></programlisting>
- <para>
- Ahora podemos consultar el
- <acronym>ACL</acronym>
- con respecto a
- los últimos cambios:
- </para>
- <programlisting language="php"><![CDATA[
- echo $acl->isAllowed('staff', 'newsletter', 'publish') ?
- "allowed" : "denied";
- // denegado
- echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
- "allowed" : "denied";
- // permitido
- echo $acl->isAllowed('staff', 'latest', 'publish') ?
- "allowed" : "denied";
- // denegado
- echo $acl->isAllowed('marketing', 'latest', 'publish') ?
- "allowed" : "denied";
- // permitido
- echo $acl->isAllowed('marketing', 'latest', 'archive') ?
- "allowed" : "denied";
- // permitido
- echo $acl->isAllowed('marketing', 'latest', 'revise') ?
- "allowed" : "denied";
- // denegado
- echo $acl->isAllowed('editor', 'announcement', 'archive') ?
- "allowed" : "denied";
- // denegado
- echo $acl->isAllowed('administrator', 'announcement', 'archive') ?
- "allowed" : "denied";
- // denegado
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.acl.refining.removing">
- <title>Eliminar los controles de acceso</title>
- <para>
- Para eliminar una o más reglas
- <acronym>ACL</acronym>
- ,
- simplemente utilice el método
- <methodname>removeAllow()</methodname>
- o
- <methodname>removeDeny()</methodname>
- . Al igual que con
- <methodname>allow()</methodname>
- y
- <methodname>deny()</methodname>
- , puede utilizar un valor
- <constant>NULL</constant>
- para indicar que el método es
- aplicable a todos los roles, recursos y/o privilegios:
- </para>
- <programlisting language="php"><![CDATA[
- // Elimina la prohibición de leer las últimas noticias de staff (y marketing,
- // por herencia)
- $acl->removeDeny('staff', 'latest', 'revise');
- echo $acl->isAllowed('marketing', 'latest', 'revise') ?
- "allowed" : "denied";
- // permitido
- // Elimina la autorización para publicar y archivar los boletines
- // marketing
- $acl->removeAllow('marketing',
- 'newsletter',
- array('publish', 'archive'));
- echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
- "allowed" : "denied";
- // denegado
- echo $acl->isAllowed('marketing', 'newsletter', 'archive') ?
- "allowed" : "denied";
- // denegado
- ]]></programlisting>
- <para>
- Los privilegios pueden ser modificados de manera incremental como
- se ha indicado
- anteriormente, pero un valor
- <constant>NULL</constant>
- para los privilegios anula tales
- cambios incrementales:
- </para>
- <programlisting language="php"><![CDATA[
- //Permitir al grupo de "marketing" todos los permisos a las últimas noticias
- $acl->allow('marketing', 'latest');
- echo $acl->isAllowed('marketing', 'latest', 'publish') ?
- "allowed" : "denied";
- //permitido
- echo $acl->isAllowed('marketing', 'latest', 'archive') ?
- "allowed" : "denied";
- //permitido
- echo $acl->isAllowed('marketing', 'latest', 'anything') ?
- "allowed" : "denied";
- // permitido
- ]]></programlisting>
- </sect2>
- </sect1>
|