update DOC-ES
[zend.git] / documentation / manual / es / module_specs / Zend_Acl-Refining.xml
blob117c0b0d6e1069477746f0a814197d7ba1744c15
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 20763 -->
3     <!-- Reviewed: no -->
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>
12         <para>
13             El
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
18             el
19             <acronym>ACL</acronym>
20             (todos los recursos). En la práctica, sin
21             embargo, los controles de acceso tienden a
22             tener excepciones y
23             diversos grados de complejidad.
24             <classname>Zend_Acl</classname>
25             permite lograr estos refinamientos de una manera sencilla y
26             flexible.
27         </para>
29         <para>
30             Para el
31             <acronym>CMS</acronym>
32             del ejemplo se ha determinado que,
33             si bien el grupo 'staff' cubre las necesidades de la
34             gran mayoría de
35             usuarios, hay una necesidad de un nuevo grupo 'marketing' que
36             requiere el
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
41             las últimas
42             noticias.
43         </para>
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
49             'marketing' de tal
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');
55 ]]></programlisting>
57         <para>A continuación, la nota que por encima de los controles de acceso
58             se refieren a
59             recursos específicos (por ejemplo, "boletín
60             informativo", "últimas noticias", "anuncio de
61             noticias"). Ahora
62             añadimos estos recursos:</para>
64         <programlisting language="php"><![CDATA[
65 // Crear recursos para las reglas
66  // newsletter
67  $acl->addResource(new Zend_Acl_Resource('newsletter'));
69  // news
70 $acl->addResource(new Zend_Acl_Resource('news'));
72  // Últimas Noticias
73 $acl->addResource(new Zend_Acl_Resource('latest'), 'news');
75  // anuncio de noticias
76 $acl->addResource(new Zend_Acl_Resource('announcement'), 'news');
77 ]]></programlisting>
79         <para>
80             Entonces es simplemente una cuestión de la definición de estas
81             normas más específicas en
82             ámbitos de la
83             <acronym>ACL</acronym>
84             :
85         </para>
87         <programlisting language="php"><![CDATA[
88  //
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');
102 ]]></programlisting>
104         <para>
105             Ahora podemos consultar el
106             <acronym>ACL</acronym>
107             con respecto a
108             los últimos cambios:
109         </para>
111         <programlisting language="php"><![CDATA[
112  echo $acl->isAllowed('staff', 'newsletter', 'publish') ?
113  "allowed" : "denied";
114  // denegado
116  echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
117  "allowed" : "denied";
118  // permitido
120  echo $acl->isAllowed('staff', 'latest', 'publish') ?
121  "allowed" : "denied";
122  // denegado
124  echo $acl->isAllowed('marketing', 'latest', 'publish') ?
125  "allowed" : "denied";
126  // permitido
128  echo $acl->isAllowed('marketing', 'latest', 'archive') ?
129  "allowed" : "denied";
130  // permitido
132  echo $acl->isAllowed('marketing', 'latest', 'revise') ?
133  "allowed" : "denied";
134  // denegado
136  echo $acl->isAllowed('editor', 'announcement', 'archive') ?
137  "allowed" : "denied";
138  // denegado
140  echo $acl->isAllowed('administrator', 'announcement', 'archive') ?
141  "allowed" : "denied";
142  // denegado
144 ]]></programlisting>
146     </sect2>
148     <sect2 id="zend.acl.refining.removing">
150         <title>Eliminar los controles de acceso</title>
152         <para>
153             Para eliminar una o más reglas
154             <acronym>ACL</acronym>
155             ,
156             simplemente utilice el método
157             <methodname>removeAllow()</methodname>
158             o
159             <methodname>removeDeny()</methodname>
160             . Al igual que con
161             <methodname>allow()</methodname>
162             y
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:
168         </para>
170         <programlisting language="php"><![CDATA[
171 // Elimina la prohibición de leer las últimas noticias de staff (y marketing,
172 // por herencia)
173 $acl->removeDeny('staff', 'latest', 'revise');
175 echo $acl->isAllowed('marketing', 'latest', 'revise') ?
176  "allowed" : "denied";
177 // permitido
179 // Elimina la autorización para publicar y archivar los boletines
180 // marketing
181 $acl->removeAllow('marketing',
182                   'newsletter',
183                   array('publish', 'archive'));
185 echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
186      "allowed" : "denied";
187 // denegado
189 echo $acl->isAllowed('marketing', 'newsletter', 'archive') ?
190 "allowed" : "denied";
192 // denegado
194 ]]></programlisting>
196         <para>
197             Los privilegios pueden ser modificados de manera incremental como
198             se ha indicado
199             anteriormente, pero un valor
200             <constant>NULL</constant>
201             para los privilegios anula tales
202             cambios incrementales:
203         </para>
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";
211 //permitido
213 echo $acl->isAllowed('marketing', 'latest', 'archive') ?
214 "allowed" : "denied";
215 //permitido
217 echo $acl->isAllowed('marketing', 'latest', 'anything') ?
218 "allowed" : "denied";
219 // permitido
220 ]]></programlisting>
222     </sect2>
224 </sect1>