[MANUAL] English:
[zend.git] / documentation / manual / pl / module_specs / Zend_Acl-Advanced.xml
blob0f45c8d04773456c795cc7ba8eabf98ef13cabbb
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.acl.advanced">
5     <title>Zaawansowane użycie</title>
7     <sect2 id="zend.acl.advanced.storing">
9         <title>Trwałe przechowywanie danych ACL</title>
11         <para>
12             Klasa <classname>Zend_Acl</classname> została zaprojektowana w taki 
13             sposób, aby nie wymagała żadnej szczególnej technologii backendu do 
14             przechowywania danych <acronym>ACL</acronym> takiej jak np. baza 
15             danych czy serwer buforujący. Kompletna implementacja w 
16             <acronym>PHP</acronym> pozwala na podstawie <acronym>Zend_Acl</acronym> 
17             budować dostosowane narzędzia administracyjne, które są relatywnie łatwe 
18             oraz elastyczne. Wiele sytuacji wymaga pewnej formy interaktywnego 
19             zarządzania <acronym>ACL</acronym>, a <classname>Zend_Acl</classname> 
20             zapewnia metody do ustawiania oraz odpytywania kontroli dostępu aplikacji.
21         </para>
23         <para>
24             Przechowywanie danych <acronym>ACL</acronym> jest zadaniem pozostawionym 
25             dla programisty, dlatego, że przykłady użycia mogą się bardzo różnić w rozmaitych
26             sytuacjach. Ponieważ możliwe jest serializowanie <classname>Zend_Acl</classname>, 
27             obiekty <acronym>ACL</acronym> mogą być serializowane za pomocą funkcji 
28             <acronym>PHP</acronym> <ulink url="http://php.net/serialize"><methodname>serialize()</methodname></ulink>,
29             a wyniki mogą być przechowane tam gdzie określi to programista, na
30             przykład w pliku, w bazie danych lub w mechanizmie buforowania.
31         </para>
33     </sect2>
35     <sect2 id="zend.acl.advanced.assertions">
37         <title>Tworzenie warunkowych reguł ACL z zapewnieniami</title>
39         <para>
40             Czasem reguła przyznawania lub zabraniania dostępu roli do zasobu nie
41             powinna być absolutna, ale powinna być oparta na różnych kryteriach.
42             Na przykład załóżmy, że pewien dostęp powinien być przyznany, ale
43             jedynie między godziną 8:00 a 17:00. Innym przykładem może być zabranie
44             dostępu adresom IP, które zostały oznaczone jako źródło nadużyć.
45             <classname>Zend_Acl</classname> ma wbudowaną obsługę implementowania 
46             reguł opartych na dowolnych warunkach, wedle potrzeb programisty.
47         </para>
49         <para>
50             <classname>Zend_Acl</classname> zapewnia obsługę warunkowych reguł za 
51             pomocą interfejsu <classname>Zend_Acl_Assert_Interface</classname>. 
52             W celu użycia interfejsu zapewnień reguł, programista pisze klasę, 
53             ktora implementuje metodę <methodname>assert()</methodname> interfejsu:
54         </para>
56         <programlisting language="php"><![CDATA[
57 class CleanIPAssertion implements Zend_Acl_Assert_Interface
59     public function assert(Zend_Acl $acl,
60                            Zend_Acl_Role_Interface $role = null,
61                            Zend_Acl_Resource_Interface $resource = null,
62                            $privilege = null)
63     {
64         return $this->_isCleanIP($_SERVER['REMOTE_ADDR']);
65     }
67     protected function _isCleanIP($ip)
68     {
69         // ...
70     }
72 ]]></programlisting>
74         <para>
75             Kiedy klasa zapewnień jest już dostępna, programista musi przekazać
76             klasę zapewnień kiedy przypisuje regułę warunkową. Reguła, która jest
77             utworzona z klasą zapewnienia będzie jedynie stosowana wtedy, gdy metoda
78             zapewnienia zwróci logiczną wartośc <constant>TRUE</constant>.
79         </para>
81         <programlisting language="php"><![CDATA[
82 $acl = new Zend_Acl();
83 $acl->allow(null, null, null, new CleanIPAssertion());
84 ]]></programlisting>
86         <para>
87             Powyższy kod tworzy warunkową regułę dostępu, ktora pozwala na dostęp
88             do wszystkich przywilejów do wszystkich zasobów dla wszystkich ról, z
89             wyjątkiem adresów IP, będących na czarnej liście. Jeśli żądanie pochodzi
90             z adresu IP, który nie jest uznany jako "czysty", wtedy reguła nie ma
91             zastosowania. Z tego względu, że reguła ma zastosowanie do wszystkich
92             ról, zasobów oraz przywilejów, zablokowany adres IP będzie miał
93             zabroniony cały dostęp. Jest to specjalny przypadek i powinien być
94             zrozumiany tak, że we  wszystkich innych przypadkach (np., tam gdzie
95             specyficzna rola, zasób lub przywilej są określone w regule), nieudane
96             zapewnienie spowoduje, że reguła nie zostanie zastosowana i inne reguły
97             powinny być zastosowane aby określić czy dostęp jest dozwolony czy
98             zabroniony.
99         </para>
101         <para>
102             Metoda <methodname>assert()</methodname> obiektu zapewnienia jest przekazywana do
103             ACL, roli, zasobu, oraz przywileju do których stosuje się zapytanie
104             autoryzacyjne (np., <methodname>isAllowed()</methodname>), w celu dostarczenia
105             kontekstu dla klasy zapewnienia aby określić warunki zapewnienia tam
106             gdzie są one potrzebne.
107         </para>
109     </sect2>
111 </sect1>