[MANUAL] English:
[zend.git] / documentation / manual / pl / module_specs / Zend_Acl-Refining.xml
blob11c97be9badb3bf4b50f168b99dcb10b314c8c55
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.acl.refining">
5     <title>Analiza kontroli dostępu</title>
7     <sect2 id="zend.acl.refining.precise">
9         <title>Precyzyjna kontrola dostępu</title>
11         <para>
12             Podstawowe <acronym>ACL</acronym> zdefiniowane w
13             <link linkend="zend.acl.introduction">poprzedniej sekcji</link> pokazują
14             jakie rozmaite uprawnienia mogą być dozwolone dla <acronym>ACL</acronym> 
15             (dla wszystkich zasobów). W praktyce, kontrola dostępu ma skłonność do 
16             posiadania wyjątków od reguł oraz różnych stopni skomplikowania. 
17             <classname>Zend_Acl</classname> pozwoli ci przeprowadzić te analizy 
18             w przystępny i elastyczny sposób.
19         </para>
21         <para>
22             W przykładowej aplikacji <acronym>CMS</acronym>, zostało zdecydowane, 
23             że podczas gdy grupa 'staff' pokryje potrzeby większości użytkowników, 
24             potrzebna jest jeszcze jedna nowa grupa 'marketing', która wymaga dostępu 
25             do newslettera oraz ostatnich nowości w <acronym>CMS</acronym>. Ta grupa 
26             jest naprawdę samowystarczalna i będzie dawała możliwość publikowania oraz
27             archiwizowania zarówno newsletterów jak i ostatnich nowości.
28         </para>
30         <para>
31             Dodatkowo, zażądano także aby grupa 'staff' miała pozwolenie do
32             przeglądania nowości, ale żeby nie mogła przeglądać ostatnich nowości.
33             Dodatkowo, archiwizowanie 'zapowiedzi' nie powinno być w ogóle możliwe
34             (nawet przez administratora), ponieważ ich okres ważności to 1-2 dni.
35         </para>
37         <para>
38             Wpierw przejrzymy rejestr ról, aby rozważyć te zmiany. Określiliśmy, że
39             grupa 'marketing' ma te same podstawowe uprawnienia co grupa 'staff',
40             więc zdefiniujemy grupę 'marketing' w taki sposób, aby dziedziczyła
41             uprawnienia od grupy 'staff':
42         </para>
44         <programlisting language="php"><![CDATA[
45 // Nowa grupa marketing dziedziczy uprawnienia od grupy staff
46 $acl->addRole(new Zend_Acl_Role('marketing'), 'staff');
47 ]]></programlisting>
49         <para>
50             Zauważ, że powyższa kontrola dostępu odnosi się do określonych zasobów
51             (np., "newsletter", "ostatnie nowości", "zapowiedzi"). Teraz dodamy te
52             zasoby:
53         </para>
55         <programlisting language="php"><![CDATA[
56 // Utwórz zasoby dla reguł
58 // newsletter
59 $acl->add(new Zend_Acl_Resource('newsletter'));
61 // nowości
62 $acl->add(new Zend_Acl_Resource('news'));
64 // ostatnie nowości
65 $acl->add(new Zend_Acl_Resource('latest'), 'news');
67 // zapowiedzi
68 $acl->add(new Zend_Acl_Resource('announcement'), 'news');
69 ]]></programlisting>
71         <para>
72             Teraz prostą sprawą jest zdefiniowanie bardziej specyficznych reguł
73             na docelowych obszarach <acronym>ACL</acronym>:
74         </para>
76         <programlisting language="php"><![CDATA[
77 // Grupa marketing musi mieć możliwość publikowania i archiwizowania
78 // newsletterów oraz ostatnich nowości
79 $acl->allow('marketing',
80             array('newsletter', 'latest'),
81             array('publish', 'archive'));
83 // Grupa Staff (oraz marketing przez dziedziczenie), ma zabroniony dostęp
84 // do przeglądania ostatnich nowości
85 $acl->deny('staff', 'latest', 'revise');
87 // Każdy (włączając w to administratorów) ma zabroniony dostęp do
88 // archiwizowania zapowiedzi
89 $acl->deny(null, 'announcement', 'archive');
90 ]]></programlisting>
92         <para>
93             Teraz możemy przeprowadzić zapytanie do <acronym>ACL</acronym> z 
94             uwzględnieniem ostatnich zmian:
95         </para>
97         <programlisting language="php"><![CDATA[
98 echo $acl->isAllowed('staff', 'newsletter', 'publish') ?
99      "allowed" : "denied";
100 // zabronione
102 echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
103      "allowed" : "denied";
104 // dozwolone
106 echo $acl->isAllowed('staff', 'latest', 'publish') ?
107      "allowed" : "denied";
108 // zabronione
110 echo $acl->isAllowed('marketing', 'latest', 'publish') ?
111      "allowed" : "denied";
112 // dozwolone
114 echo $acl->isAllowed('marketing', 'latest', 'archive') ?
115      "allowed" : "denied";
116 // dozwolone
118 echo $acl->isAllowed('marketing', 'latest', 'revise') ?
119      "allowed" : "denied";
120 // zabronione
122 echo $acl->isAllowed('editor', 'announcement', 'archive') ?
123      "allowed" : "denied";
124 // zabronione
126 echo $acl->isAllowed('administrator', 'announcement', 'archive') ?
127      "allowed" : "denied";
128 // zabronione
129 ]]></programlisting>
131     </sect2>
133     <sect2 id="zend.acl.refining.removing">
135         <title>Usuwanie kontroli dostępu</title>
137         <para>
138             Aby usunąć jedną lub więcej reguł z <acronym>ACL</acronym>, po prostu użyj 
139             dostępnych metod <methodname>removeAllow()</methodname> lub 
140             <methodname>removeDeny()</methodname>. Podobnie jak w  metodach 
141             <methodname>allow()</methodname> oraz <methodname>deny()</methodname>, 
142             możesz podać wartość <constant>NULL</constant> aby oznaczyć wszystkie 
143             role, wszystkie zasoby i/lub wszystkie przywileje:
144         </para>
146         <programlisting language="php"><![CDATA[
147 // Usunięcie zabronienia możliwości przeglądania ostatnich nowości
148 // przez grupę staff (oraz marketing, przez dziedziczenie)
149 $acl->removeDeny('staff', 'latest', 'revise');
151 echo $acl->isAllowed('marketing', 'latest', 'revise') ?
152      "allowed" : "denied";
153 // dozwolone
155 // Usunięcie wszystkich pozwoleń publikowania i archiwizowania newsletterów
156 // przez grupę marketing
157 $acl->removeAllow('marketing', 'newsletter', array('publish', 'archive'));
159 echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
160      "allowed" : "denied";
161 // zabronione
163 echo $acl->isAllowed('marketing', 'newsletter', 'archive') ?
164      "allowed" : "denied";
165 // zabronione
166 ]]></programlisting>
168         <para>
169             Przywileje mogą być modyfikowane inkrementalnie jak pokazano wyżej, ale
170             wartość <constant>NULL</constant> dla przywilejów nadpisuje te inkrementalne
171         zmiany:
172         </para>
174         <programlisting language="php"><![CDATA[
175 // Nadanie grupie marketing wszystkich uprawnień związanych z ostatnimi nowościami
176 $acl->allow('marketing', 'latest');
178 echo $acl->isAllowed('marketing', 'latest', 'publish') ?
179      "allowed" : "denied";
180 // dozwolone
182 echo $acl->isAllowed('marketing', 'latest', 'archive') ?
183      "allowed" : "denied";
184 // dozwolone
186 echo $acl->isAllowed('marketing', 'latest', 'anything') ?
187      "allowed" : "denied";
188 // dozwolone
189 ]]></programlisting>
191     </sect2>
193 </sect1>