<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum CakePHP.org.pl - Uwierzytelnianie i autoryzacja]]></title>
		<link>http://forum.cakephp.org.pl/</link>
		<description><![CDATA[Najświeże tematy w Forum CakePHP.org.pl.]]></description>
		<lastBuildDate>Sat, 27 Jun 2009 16:25:21 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Logowanie użytkowników.]]></title>
			<link>http://forum.cakephp.org.pl/topic/79/logowanie-uzytkownikow/new/posts/</link>
			<description><![CDATA[<p>Witam,</p><p>Z góry przepraszam za zakładanie tak z pozoru śmiesznego tematu, ale mam ogromny problem ze zrozumieniem systemu logowania użytkowników w CakePHP. Działałem w przeszłości nieco na CodeIgniter, pisałem &quot;cms&#039;y&quot;, które działały na proceduralnym php. CakePHP bardzo mi się podoba. Baking może nie jest dla mnie, bo wolę sam pisać kod modelu, widoku i kontrolera, ale ogólne możliwości i prostota Cake jest niesamowita i kusząca.</p><p>Przeczytałem dokumentację z oficjalnej strony, doszedłem do 10 rozdziału z przykładami. Ten z przykładowym blogiem zrobiłem i wszystko działało ok.</p><p>Teraz jednak chciałbym zrobić logowanie użytkowników i już zupełnie nie mogę zrozumieć tutoriala z oficjalnej dokumentacji, ani też nie za bardzo potrafię zrozumieć cokolowiek innego co znalazłem w sieci.</p><p>Mógłby mi ktoś coś polecić w tej kwestii? Jakiś na prawdę dobry tutorial, dla dummies. Bo stwarza mi to problemy (nie tylko chyba mi), a chciałbym umieć używać funkcji autoryzacji Cake&#039;a.</p><p>Albo jeszcze lepiej - jakby ktoś mógłby mi podrzuć jakiś kawałek swojego, lub innego przykładowego skryptu, w którym jest powiedzmy CRUD dla postów na blogu i ma logowanie dla panelu administracyjnego. Lubię się uczyć z gotowego kodu.</p><p>Pozdrawiam</p>]]></description>
			<author><![CDATA[dummy@example.com (carlin)]]></author>
			<pubDate>Sat, 27 Jun 2009 16:25:21 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/79/logowanie-uzytkownikow/new/posts/</guid>
		</item>
		<item>
			<title><![CDATA[Sesje i subdomeny]]></title>
			<link>http://forum.cakephp.org.pl/topic/15/sesje-i-subdomeny/new/posts/</link>
			<description><![CDATA[<p>Witam,</p><p>Co musze zrobić żeby utrzymać sesje w subdomenach ?</p><p>Konfiguracje subdomen mam w pliku .htaccess - może w nim coś trzeba dopiwać ?</p><p>Pozdrawiam i z góry dzięki za pomoc.</p>]]></description>
			<author><![CDATA[dummy@example.com (id02009)]]></author>
			<pubDate>Sat, 30 May 2009 17:19:44 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/15/sesje-i-subdomeny/new/posts/</guid>
		</item>
		<item>
			<title><![CDATA[Kontrola poprawności drzewa]]></title>
			<link>http://forum.cakephp.org.pl/topic/53/kontrola-poprawnosci-drzewa/new/posts/</link>
			<description><![CDATA[<p>Hej mam pytanko - jak kontrolujecie poprawnosc drzewa ACL. Zauwazylem ze jezeli tak sobie od czapy usuniemy jakis wezel z aro lub aco, Cake zaczyna sypac bledami o niezgodnosci nod&#039;ow.</p><p>Pytania:<br />1) macie jakis behavior lub funkcje kontrolujaca czy w drzewie nie zaszla jakas zmiana lub nie wystapil blad, a gdy zaszla to naprawialo by to drzewo?</p><p>2) jezeli nie to czy jest takie narzedzie lub funkcja ktora mozna wywolywac raz na jakis czas -&gt; naprawiajaca wszystkie wezly.</p><p>PS: nie musza to byc jakies wklejane kody -&gt; mozecie podac tylko opisowy schemat dzialania lub hasła to wygoogluje <img src="http://forum.cakephp.org.pl/img/smilies/tongue.png" width="15" height="15" alt="tongue" /></p>]]></description>
			<author><![CDATA[dummy@example.com (alfabeta)]]></author>
			<pubDate>Wed, 29 Apr 2009 16:02:38 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/53/kontrola-poprawnosci-drzewa/new/posts/</guid>
		</item>
		<item>
			<title><![CDATA[Auth]]></title>
			<link>http://forum.cakephp.org.pl/topic/63/auth/new/posts/</link>
			<description><![CDATA[<p>Poniewaz nie uzyskalem w innym watku odpowiedzi stworze jeden normalny <img src="http://forum.cakephp.org.pl/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /></p><p>Czy jest sens tego uzywac? Mowa o Auth. W czym jest lepszy od zwyklego isset($this-&gt;Session)? Czy to nie strzelanie z armaty do komara?</p><p>Dzieki.</p>]]></description>
			<author><![CDATA[dummy@example.com (duke_piotr)]]></author>
			<pubDate>Mon, 27 Apr 2009 09:54:21 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/63/auth/new/posts/</guid>
		</item>
		<item>
			<title><![CDATA[Gdzie acl->check()]]></title>
			<link>http://forum.cakephp.org.pl/topic/27/gdzie-aclcheck/new/posts/</link>
			<description><![CDATA[<p>Hej, mam pytanko: </p><p>Pytanie: z waszego doswiadczenia gdzie uzywacie sprawdzania czy klient ma prawo dostepu?</p><p>Opis: Postanowilem srobowac swoich sil z ACL i chyba zalapalem oco biega. Do testow stworzylem mala testowa stronke z mozliwoscia logowania i powstal problem.<br />Czy efektywnie jest <br />(1) podczas logowania zapisywanie do zmiennej session calej tabeli praw dostepu czy tez <br />(2) podczas wywolywania kazdej funkcji w dowolnym kontrolerze sprawdzac prawa a moze <br />(3) w modelu przed uzyciem funkcji save albo gdzies zrobic warunek sprawdzajacy, czy tez <br />(4) polaczyc dwie metody i zapisac prawa i sprawdzac w zmiennej czy ktos ma prawa w kontrolerze lub <br />(5) inaczej ??:P</p>]]></description>
			<author><![CDATA[dummy@example.com (robal77)]]></author>
			<pubDate>Tue, 24 Mar 2009 15:05:37 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/27/gdzie-aclcheck/new/posts/</guid>
		</item>
		<item>
			<title><![CDATA[Wlasny system logowania/uwierzytelniania]]></title>
			<link>http://forum.cakephp.org.pl/topic/45/wlasny-system-logowaniauwierzytelniania/new/posts/</link>
			<description><![CDATA[<p>Kto przebrnal przez system logowania Acl cake, component otAuth oraz moze kilka innych i potrawi z powodzeniem zaimplementowac to we wlasnym zakresie ...szacun. ja nie <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" />. Dlatego przedstawiam dosc indywidualne rozwiazanie systemu logwania i uwierzytelniania.<br />Zacznijmy od bazy. Potrzebujemy 2 tabele w bazie danych</p><p>groups - przechowuje prawa poszczegolnych grup uzytkownikow. Ponizej struktura..<br /></p><div class="codebox"><pre><code>CREATE TABLE groups (
  id int(3) NOT NULL auto_increment,
  group_name varchar(50) character set latin1 default NULL,
  level int(5) default NULL,
  cake tinyint(1) NOT NULL default &#039;0&#039;,
  debug tinyint(1) NOT NULL default &#039;0&#039;,
  przekierujPoZalogowaniu varchar(250) character set latin1 NOT NULL default &#039;/&#039;,
  modified datetime NOT NULL,
  created datetime NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;</code></pre></div><p>- group_name - przechowywujemy tutaj nazwy grup userow, np. Klient, Admin, Super Admin<br />- level - poziom jakie dana grupa posiada<br />- cake - pzyjmuje wartosci 0 lub 1...w dalszej czesci bedzie to dokladniej wyjasnione<br />- debug - jaki debug ma byc wlaczony dla danej grupy po zalogowaniu (przydatne jezeli logujemy sie jako Super Admin i chcemy miec debug = 2)<br />- przekierujPoZalogowaniu - miejsce gdzie przekierowujemy usera po zalogowaniu np. Admin =&gt; &#039;/admin&#039; , Klient =&gt; /users/myaccount</p><p>users - tabel w ktorej przechowywujemy dane dostepowe do systemu<br /></p><div class="codebox"><pre><code>CREATE TABLE users (
  id int(7) unsigned NOT NULL auto_increment,
  userName varchar(50) NOT NULL,
  passwd varchar(32) NOT NULL,
  name varchar(50) NOT NULL,
  email varchar(100) NOT NULL,
  lastVisit datetime default &#039;0000-00-00 00:00:00&#039;,
  group_id int(10) unsigned NOT NULL default &#039;0&#039;,
  active tinyint(1) unsigned NOT NULL default &#039;0&#039;,
  created datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,
  modified datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,
  PRIMARY KEY  (id),
  UNIQUE KEY username (userName),
  UNIQUE KEY email (email,userName),
  KEY group_id (group_id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;</code></pre></div><p>- userName - nazwa robocza usera np. juby<br />- email - nasz login<br />- lastVisit - mozemy wykorzystac do statystyk kiedy, kto sie zalogowal<br />- group_id - bardzo wazna czesc tabeli, tutaj podajemy group_id jaki posiadac bedzie dany user, np. jezeli w tabeli &#039;groups&#039; pod id = 1 bedziemy przechowywac Super Admina to wpisujac tutaj 1 pokazujemy ze dany user ma byc Super Adminem<br />- active - mozemy wykorzystac w celu sprawdzenia czy dane konto jest aktywne lub nie (0 - nie, 1- tak)</p><p>nastepnie tworzymy modele z nstp relacjami<br />group.php<br /></p><div class="codebox"><pre><code>class Group extends AppModel
{
    var $name = &#039;Group&#039;;
    var $hasMany = &#039;User&#039;;
}</code></pre></div><p>oraz user.php<br /></p><div class="codebox"><pre><code>class User extends AppModel {

    var $name = &#039;User&#039;;
    var $belongsTo = array(
            &#039;Group&#039; =&gt; array(&#039;className&#039; =&gt; &#039;Group&#039;,
                                &#039;foreignKey&#039; =&gt; &#039;group_id&#039;
            )
    );</code></pre></div><p>Zalozmy ze w tablicy &#039;groups&#039; bedziemy miec nstp. grupy userow<br /></p><div class="codebox"><pre><code>INSERT INTO `groups` (
`id`, `group_name`,  `cake`, `debug`, `przekierujPoZalogowaniu`, `modified`, `created`) VALUES
(1, &#039;Super Admin&#039;, 1, 2, &#039;/admin/home&#039;, &#039;0000-00-00 00:00:00&#039;, &#039;0000-00-00 00:00:00&#039;),
(2, &#039;Admin&#039;, 1, 0, &#039;/admin/home&#039;, &#039;0000-00-00 00:00:00&#039;, &#039;0000-00-00 00:00:00&#039;),
(3, &#039;Klient&#039;, 0, 0, &#039;/&#039;, &#039;0000-00-00 00:00:00&#039;, &#039;0000-00-00 00:00:00&#039;);</code></pre></div><p>jezeli mamy juz utworzone modele oraz tabele czas na app_controller.php. Oto kilka rzeczy, ktore musimy w nim wykonac.<br /></p><div class="codebox"><pre><code>//app_controller.php

// miejsce formularza z logowaniem, bedzie nam potrzebny controller &#039;users_controller.php&#039;
var $loginForm = &quot;/users/login&quot;;

function beforeFilter()
    {
        // w funkcji tej sprawdzamy czy przypadkiem w adresie nie ma Routing.admin....jezeli jest wywolujemy funckje restrictAccess(1)
        if (isset($this-&gt;params[Configure::read(&#039;Routing.admin&#039;)])) {
            $this-&gt;restrictAccess(1);
        } 
    }


function beforeRender()
    {
        //jeeli ktos probuje sie dostac do stefy admin, zmien layout o takiej samej nazwie jak Routing.admin (core.php)
        if (isset($this-&gt;params[Configure::read(&#039;Routing.admin&#039;)])) {
            $this-&gt;layout = Configure::read(&#039;Routing.admin&#039;);
        }
        if (($this-&gt;layout == &#039;ajax&#039;) || ($this-&gt;layout == &#039;xls&#039;)) {
            Configure::write(&#039;debug&#039;, 0);
        }
    }

function restrictAccess($cake = 0)
    {
        // sprawdzamy czy w sesji jest zmienna &#039;zalogowany&#039; (zmienna tablicowa,swiadczy ze user jest zalogowany) i czy przekazany parametr
        // znajduje sie w zmiennej tablicowaj &#039;zalogowany&#039;
        if (($this-&gt;Session-&gt;check(&quot;zalogowany&quot;)) &amp;&amp; ($this-&gt;Session-&gt;read(&quot;zalogowany.Group.cake&quot;)&gt;=$cake)) {            
            return true;
        } else {
            // jezeli nie jestesmy zalogowani to...
            // wyciagnij wszystkie grupy z tabeli &#039;groups&#039;
            $groupsArray = $this-&gt;Group-&gt;find(&#039;all&#039;, array( &#039;fields&#039; =&gt; &#039;Group.id&#039;, &#039;order&#039; =&gt; &#039;id ASC&#039;, &#039;recursive&#039; =&gt; 0));
 
            // tworzymy tabele pomocnicza
            $groups = array();
            foreach( $groupsArray as $thisGroups) {
                $groups[] =  $thisGroups[&#039;Group&#039;][&#039;id&#039;];
            }
            
            // wytnij kawalek tablicy , opis funkcji pobierzIdGrupy(), sprawdzDostepPoIdGrupy() ponizej....reszte przeanalizujcie sami :)
            $groups = array_slice( $groups, 0, ($this-&gt;pobierzIdGrupy()-1));
            $this-&gt;sprawdzDostepPoIdGrupy( $groups );
            $this-&gt;Session-&gt;write(&quot;adresProbyWejscia&quot;,str_replace(&#039;url=&#039;,&#039;&#039;,$_SERVER[&#039;QUERY_STRING&#039;]));
            $this-&gt;Session-&gt;setFlash(&quot;Proszę się zalogować&quot;);
            $this-&gt;redirect($this-&gt;loginForm);
        }
    }

// ta funkcja sprawdza nam czy dany user ma dostep do danej czesci witryny w zaleznosci od jego group_id, funkcja bedzie wykorzystywana
// wszedzie tam , gdzie chcemy zastrzec sobie dostep tylko dla danych userow z danej grupy...ponizej pokaze jak to zrobic...
function sprawdzDostepPoIdGrupy($groups = null)
    {
        if (!empty($groups)) {
            if (is_array($groups) &amp;&amp; in_array($this-&gt;Session-&gt;read(&quot;zalogowany.Group.id&quot;),$groups)) {
                return true;
            } elseif (!is_array($groups) &amp;&amp; $this-&gt;Session-&gt;read(&quot;zalogowany.Group.id&quot;)==$groups) {    
                return true;        
            } else {
                $this-&gt;Session-&gt;write(&quot;adresProbyWejscia&quot;,str_replace(&#039;url=&#039;,&#039;&#039;,$_SERVER[&#039;QUERY_STRING&#039;]));
                $this-&gt;Session-&gt;setFlash(&quot;Nie masz dostępu do tej części witryny&quot;);
                $this-&gt;redirect($this-&gt;loginForm);
            }
        }
    }

// funkcja wyciaga z sesji group_id danego usera
function pobierzIdGrupy()
    {
        if ($this-&gt;Session-&gt;check(&quot;zalogowany&quot;)) {
            return $this-&gt;Session-&gt;read(&quot;zalogowany.Group.id&quot;);
        } else {
            return false;
        }
    }</code></pre></div><p>to tyle jezeli chodzi o app_controllera, teraz czas na users_controller.php, a konkretnie funkcje &#039;login&#039;<br /></p><div class="codebox"><pre><code>// users_controller.php
function login()
    {
        // po wypelnieniu formularza logowania
       if (empty($this-&gt;data)) 
           { // pokaz formularz logowania
           }
       else
           { // proba zalogowania
           $this-&gt;data[&#039;User&#039;][&#039;passwd&#039;] = md5($this-&gt;data[&#039;User&#039;][&#039;passwd&#039;]);
           $this-&gt;User-&gt;recursive = 1;
           
           // sprawdzamy czy istnieje taki user oraz czy jego konto jest aktywne, czyli active = 1
           $user = $this-&gt;User-&gt;find(&quot;User.email=&#039;&quot;.$this-&gt;data[&#039;User&#039;][&#039;email&#039;].&quot;&#039; AND passwd=&#039;&quot;.$this-&gt;data[&#039;User&#039;][&#039;passwd&#039;].&quot;&#039; AND User.active = 1&quot;);
           if (!empty($user))
               {
               // jezeli istnieje taki user zaladuj do jego sesji jego dane
               $this-&gt;Session-&gt;write(&quot;zalogowany&quot;,$user); 
      
               // jezeli user probuje dostac sie do zastrzezonej czesci serwisu i nie ma pozwolenia...porzekieruj do strony logowania.
               // w innym przypadku kontynuuj
               if ($this-&gt;Session-&gt;read(&quot;adresProbyWejscia&quot;)&lt;&gt;&#039;&#039;) 
                   {                
                   $strzezonaAkcja = (bool)(strpos($this-&gt;Session-&gt;read(&quot;adresProbyWejscia&quot;), Configure::read(&#039;Routing.admin&#039;), 0) === 0);
                   if ($strzezonaAkcja &amp;&amp; $user[&#039;Group&#039;][&#039;cake&#039;]==&#039;0&#039;) 
                       {
                       $this-&gt;Session-&gt;setFlash(&quot;Przepraszamy &quot;.$user[&#039;User&#039;][&#039;userName&#039;].&quot;, ale nie możesz dostać się do panelu administracyjnego.&quot;);       
                       $this-&gt;redirect($user[&#039;Group&#039;][&#039;adresProbyWejscia&#039;]);
                       exit();
                       }
                   else
                       {
                            if($this-&gt;Session-&gt;read(&quot;adresProbyWejscia&quot;) == Configure::read(&#039;Routing.admin&#039;)) {
                                $this-&gt;redirect($user[&#039;Group&#039;][&#039;przekierujPoZalogowaniu &#039;]);
                            } else {
                                $this-&gt;redirect($this-&gt;Session-&gt;read(&quot;przekierujPoZalogowaniu &quot;));
                            }
                       }
                   }
               else
                   {
                   $this-&gt;redirect($user[&#039;Group&#039;][&#039;przekierujPoZalogowaniu &#039;]);
                   }
               exit();
               }
           else
               {
               $this-&gt;Session-&gt;setFlash(&quot;Zły email (login) lub hasło.&quot;);   
               $this-&gt;redirect($this-&gt;loginForm);
               }
           }    
    }</code></pre></div><p>i teraz cala magia : jezeli ktos bedzie chcial sie dostac do czesci serwisu zawierajacego &#039;Routing.admin&#039;. np. funckji &#039;admin_add&#039; kontrolera &#039;news&#039;, wowczas to logowanie sprawdzi czy dany user jest zalogowany oraz czy ma tam dostep. </p><br /><p>Natomiast jezeli bedziemy chcieli ograniczyc dostep do jakiejs funckji np. &#039;add&#039; kontrolera &#039;news&#039; robimy to tak<br /></p><div class="codebox"><pre><code>function add() 
{
   // wywolaj funkcje z app_controllera z parametrami w postaci tablicy, gdzie chcemy aby do tej funkcji mieli tylko Super Admini oraz Admin,
   // Klienci nie beda posiadali dostepu
   $this-&gt;sprawdzDostepPoIdGrupy(array(1,2))
}</code></pre></div><p>Aha, jeszcze jedna sprawa, formularz logowani (views/users/login.ctp)<br /></p><div class="codebox"><pre><code>&lt;form action=&quot;/users/login/&quot; method=&quot;post&quot; id=&quot;loginForm&quot;&gt;
    &lt;?php echo $form-&gt;input(&#039;User.email&#039;);?&gt;
    &lt;?php echo $form-&gt;input(&#039;User.passwd&#039;);?&gt;
    &lt;?php echo $form-&gt;submit();?&gt;
&lt;/form&gt;</code></pre></div><p>Mam nadzieje ze ten system przyda sie komus. Sadze ze jest dosc prosty w przeanalizowaniu. Napewno skuteczny..przynajmniej tak mi sie wydaje. Powodzenia w uzytkowaniu.</p>]]></description>
			<author><![CDATA[dummy@example.com (juby)]]></author>
			<pubDate>Tue, 17 Feb 2009 20:11:40 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/45/wlasny-system-logowaniauwierzytelniania/new/posts/</guid>
		</item>
		<item>
			<title><![CDATA[Acl i admin...]]></title>
			<link>http://forum.cakephp.org.pl/topic/23/acl-i-admin/new/posts/</link>
			<description><![CDATA[<p>Witam, to mój pierwszy post.<br />Widzę że ruch jest tutaj raczej mały, ale może ktoś mi jest w stanie coś zasugerować/pomoc.</p><p>Mam lekki problem z Acl. <br />Mam tabele users gdzie są użytkownicy systemu (wszyscy klienci, moderatorzy, admin).<br />Tabele groups gdzie są te 3 wymienione grupy.<br />Skorzystałem z Aclbehavior, dodanie nowego użytkownika czy grupy ładnie dodaje sie do ARO.<br />Stworzyłem dwa kontrolery: users i usermanagers. <br />Users - jest dla klienta (index,usun niedostepne) w nim &quot;login&quot;, &quot;logout&quot;, &quot;rezerwuj&quot; dostępne dla wszystkich przez $allowedActions<br />Usermanagers - dla moderatorów i adminów. W nim zarządzanie użytkownikami.</p><p>I teraz mam dylemat:<br />W tabeli ACO jest np taka struktura: (druga pozycja to parent)<br />1 null Site<br />2 1 Users<br />3 1 Usermanagers<br />4 1 Memoirs</p><p>W tabeli AROS_ACOS (np): <br />dla grupy adminów dla 1 (czyli site) CRUD na 1,1,1,1<br />dla grupy mod dla 1 (czyli dla site) CRUD na 0,1,0,0<br />dla grupy klientów dla 1 (czyli site) CRUD 0,1,0,0</p><p>Czyli dodaje zezwolenia kontrolerami.</p><p>Pytanie: czy lepiej użyć admin routing? Zrobić jeden kontroler, ale za to wypada mi chyba dodać wszystkie metody do ACO i co za tym idzie do AROS_ACOS? Tego będzie strasznie dużo (30 kontrolerów i pełno w nich metod) i ciężko będzie zapanować.<br />Już głupi jestem... <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><br /><br /><p>Dodane po dłuższej chwili...<br />I już problem...<br />Dodałem na próbę do ACO metodę admin_index<br />Ściągnąłem zezwolenia dla klientów CRUD -1,-1,-1,-1<br />Kiedy loguję sie jako klient niestety dalej mam dostęp do admin/controller/index<br />Kiedy np. sprawdzam $this-&gt;Acl-&gt;check(&#039;ala&#039;, &#039;admin_index&#039;,&#039;read&#039;); zachowuje się poprawnie - czyli daje false.<br />Cos przeoczyłem?</p>]]></description>
			<author><![CDATA[dummy@example.com (VVilku)]]></author>
			<pubDate>Wed, 19 Nov 2008 13:31:31 +0000</pubDate>
			<guid>http://forum.cakephp.org.pl/topic/23/acl-i-admin/new/posts/</guid>
		</item>
	</channel>
</rss>
