1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20763 -->
4 <sect1 id="zend.acl.refining">
6 <title>Perfeccionamiento de los controles de acceso</title>
8 <sect2 id="zend.acl.refining.precise">
10 <title>Definir mejor los controles de acceso</title>
14 <acronym>ACL</acronym>
15 básico según lo definido en la
16 <link linkend="zend.acl.introduction"> sección anterior </link>
17 demuestra cómo los diversos privilegios se pueden otorgar sobre todo
19 <acronym>ACL</acronym>
20 (todos los recursos). En la práctica, sin
21 embargo, los controles de acceso tienden a
23 diversos grados de complejidad.
24 <classname>Zend_Acl</classname>
25 permite lograr estos refinamientos de una manera sencilla y
31 <acronym>CMS</acronym>
32 del ejemplo se ha determinado que,
33 si bien el grupo 'staff' cubre las necesidades de la
35 usuarios, hay una necesidad de un nuevo grupo 'marketing' que
37 acceso al boletín de noticias y las últimas noticias en
38 el <acronym>CMS</acronym>. El grupo es bastante auto
39 suficiente y tendrá la capacidad
40 de publicar y de archivar los boletines de noticias y
45 <para>Primero revisamos el registro del rol para reflejar estos
46 cambios. Hemos determinado
47 que el grupo 'marketing' tiene los mismos
48 permisos básicos que 'staff', así que definimos
50 manera que herede los permisos de 'staff':</para>
52 <programlisting language="php"><![CDATA[
53 // El nuevo grupo de Marketing hereda los permisos de Staff
54 $acl->addRole(new Zend_Acl_Role('marketing'), 'staff');
57 <para>A continuación, la nota que por encima de los controles de acceso
59 recursos específicos (por ejemplo, "boletín
60 informativo", "últimas noticias", "anuncio de
62 añadimos estos recursos:</para>
64 <programlisting language="php"><![CDATA[
65 // Crear recursos para las reglas
67 $acl->addResource(new Zend_Acl_Resource('newsletter'));
70 $acl->addResource(new Zend_Acl_Resource('news'));
73 $acl->addResource(new Zend_Acl_Resource('latest'), 'news');
75 // anuncio de noticias
76 $acl->addResource(new Zend_Acl_Resource('announcement'), 'news');
80 Entonces es simplemente una cuestión de la definición de estas
81 normas más específicas en
83 <acronym>ACL</acronym>
87 <programlisting language="php"><![CDATA[
89 Marketing debe ser capaz de archivar y publicar boletines informativos y
90 // las últimas noticias
91 $acl->allow('marketing',
92 array('newsletter', 'latest'),
93 array('publish', 'archive'));
95 // Staff (y marketing, por herencia), se le denega el permiso a
96 // revisar las últimas noticias
97 $acl->deny('staff', 'latest', 'revise');
99 // Todos (incluyendo los administradores) tienen permiso denegado para
100 // archivar anuncios y noticias
101 $acl->deny(null, 'announcement', 'archive');
105 Ahora podemos consultar el
106 <acronym>ACL</acronym>
111 <programlisting language="php"><![CDATA[
112 echo $acl->isAllowed('staff', 'newsletter', 'publish') ?
113 "allowed" : "denied";
116 echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
117 "allowed" : "denied";
120 echo $acl->isAllowed('staff', 'latest', 'publish') ?
121 "allowed" : "denied";
124 echo $acl->isAllowed('marketing', 'latest', 'publish') ?
125 "allowed" : "denied";
128 echo $acl->isAllowed('marketing', 'latest', 'archive') ?
129 "allowed" : "denied";
132 echo $acl->isAllowed('marketing', 'latest', 'revise') ?
133 "allowed" : "denied";
136 echo $acl->isAllowed('editor', 'announcement', 'archive') ?
137 "allowed" : "denied";
140 echo $acl->isAllowed('administrator', 'announcement', 'archive') ?
141 "allowed" : "denied";
148 <sect2 id="zend.acl.refining.removing">
150 <title>Eliminar los controles de acceso</title>
153 Para eliminar una o más reglas
154 <acronym>ACL</acronym>
156 simplemente utilice el método
157 <methodname>removeAllow()</methodname>
159 <methodname>removeDeny()</methodname>
161 <methodname>allow()</methodname>
163 <methodname>deny()</methodname>
164 , puede utilizar un valor
165 <constant>NULL</constant>
166 para indicar que el método es
167 aplicable a todos los roles, recursos y/o privilegios:
170 <programlisting language="php"><![CDATA[
171 // Elimina la prohibición de leer las últimas noticias de staff (y marketing,
173 $acl->removeDeny('staff', 'latest', 'revise');
175 echo $acl->isAllowed('marketing', 'latest', 'revise') ?
176 "allowed" : "denied";
179 // Elimina la autorización para publicar y archivar los boletines
181 $acl->removeAllow('marketing',
183 array('publish', 'archive'));
185 echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
186 "allowed" : "denied";
189 echo $acl->isAllowed('marketing', 'newsletter', 'archive') ?
190 "allowed" : "denied";
197 Los privilegios pueden ser modificados de manera incremental como
199 anteriormente, pero un valor
200 <constant>NULL</constant>
201 para los privilegios anula tales
202 cambios incrementales:
205 <programlisting language="php"><![CDATA[
206 //Permitir al grupo de "marketing" todos los permisos a las últimas noticias
207 $acl->allow('marketing', 'latest');
209 echo $acl->isAllowed('marketing', 'latest', 'publish') ?
210 "allowed" : "denied";
213 echo $acl->isAllowed('marketing', 'latest', 'archive') ?
214 "allowed" : "denied";
217 echo $acl->isAllowed('marketing', 'latest', 'anything') ?
218 "allowed" : "denied";