<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IMS Blog - blog o modernom programovaní od Tibor Piňo &#187; acl</title>
	<atom:link href="http://ims.rockretail.com/tag/acl/feed/" rel="self" type="application/rss+xml" />
	<link>http://ims.rockretail.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 18 Feb 2010 10:11:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Access Control List v CakePHP &#8211; 1. časť</title>
		<link>http://ims.rockretail.com/2009/05/27/access-control-list-v-cakephp-1-cast/</link>
		<comments>http://ims.rockretail.com/2009/05/27/access-control-list-v-cakephp-1-cast/#comments</comments>
		<pubDate>Wed, 27 May 2009 12:58:03 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[access control list]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[autorizácia]]></category>
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Jednou z najdôležitejších a zároveň jednou z najproblema­tickejších častí CakePHP je Access Control List. Tento miniseriál má za cieľ priniesť viac svetla do problematiky ACL.
Čo je Access Control List
Access Control List (ďalej len ACL) predstavuje spôsob, akým môžeme riadiť oprávnenia v rámci našej aplikácie jednoduchým a udržovateľným spôsobom. Nato, aby sme mohli požadovaného chovania dosiahnuť, [...]]]></description>
			<content:encoded><![CDATA[<p>Jednou z najdôležitejších a zároveň jednou z najproblema­tickejších častí CakePHP je Access Control List. Tento miniseriál má za cieľ priniesť viac svetla do problematiky ACL.<span id="more-63"></span></p>
<h2>Čo je Access Control List</h2>
<p>Access Control List (ďalej len ACL) predstavuje spôsob, akým môžeme riadiť oprávnenia v rámci našej aplikácie jednoduchým a udržovateľným spôsobom. Nato, aby sme mohli požadovaného chovania dosiahnuť, potrebujeme dva hlavné prvky: prvým prvkom je objekt, ktorý žiada niečo, a druhým prvkom je objekt, ktorý je žiadaný. CakePHP používa pre tieto dva hlavné prvky názvy ARO (Access Control Object) a ACO (Access Request Object). ARO potom reprezentuje objekt, ktorý niečo žiada (väčšinou sa jedná o normálneho užívateľa aplikácie) a ACO predstavuje objekt, ktorý je žiadaný (napr. akcia controllera alebo webová služba). Vyššie napísané môžeme teda zhrnúť do vety: ACL je mechanizmus, ktorý rozhoduje o prístupe ARO k ACO, resp. rozhoduje o prístupe užívateľov alebo častí systému k dátam alebo iným častiam systému. Zároveň si však treba uvedomiť, že v prípae ACL sa nejedná o autentifikáciu, jedná sa o proces autorizácie, ktorý sa uskutočňuje až po vykonaní autentifikácie.</p>
<h2>Ako ACL funguje</h2>
<p>Aby sme si celý mechanizmus dokázali predstaviť, vytvoríme si jednoduchý reálny príklad. Predstavme si, že v našej aplikácii sa vyskytuje niekoľko typov užívateľov (ďalej len ARO): administrátor, redaktor a návštevník. Taktiež má náš systém svoje vlastnosti, ku ktorým budú pristupovať ARO. Náš systém je jednoduchý a obsahuje následujúce vlastnosti (ďalej len ACO): zobrazenie článku, pridanie článku a pridanie komentára. Jednotlivé ARO by sme mohli prehľadne zapísať následovne</p>
<ul class="acl">
<li>užívatelia
<ul>
<li>administrátor
<ul>
<li>Admin 1</li>
</ul>
</li>
</ul>
<ul>
<li>redaktor
<ul>
<li>Redaktor 1</li>
</ul>
</li>
</ul>
<ul>
<li>návštevník
<ul>
<li>User 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>CakePHP používa pre uloženie ARO stromovú štruktúru, ktorá umožňuje (napr. oproti tabuľke) zoskupiť užívateľov do jednotlivých skupín a riadiť tak prístup na úrovni týchto skupín, čo predstavuje väčšiu flexibilitu.</p>
<p>Zoznam ARO máme hotový, ešte musíme k nim priradiť jednotlivé ACO a tým vytvoríme kompletný ACL, ktorý bude riadiť prístup k našej aplikácii. Kompletný ACL bude vypadať následovne</p>
<ul class="acl">
<li>užívatelia<br />
	<strong>Deny:</strong> all</p>
<ul>
<li>administrátor<br />
			<strong>Allow:</strong> zobrazenie článku, pridanie článku, pridanie komentára</p>
<ul>
<li>Admin 1</li>
</ul>
</li>
</ul>
<ul>
<li>redaktor<br />
			<strong>Allow:</strong> zobrazenie článku, pridanie článku</p>
<ul>
<li>Redaktor 1</li>
</ul>
</li>
</ul>
<ul>
<li>návštevník<br />
			<strong>Allow:</strong> zobrazenie článku, pridanie komentára</p>
<ul>
<li>User 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Ako môžeme vidieť, stromová štruktúra nám poskytuje vysokú flexibilitu. Ako užívateľ (bez bližšieho určenia či sa jedná o administrátora, redaktora alebo návštevníka) nemáme žiadne oprávnenie v našej aplikácii. Avšak ako redaktor môžeme zobrazovať a pridávať články, na druhej strane ako návštevník môžeme články len zobrazovať. Ako administrátor máme prístup ku všetkým vlastnostiam aplikácie. Vďaka spomínanej flexibilite stromovej štruktúry je veľmi jednoduché pridávať a odoberať skupiny alebo meniť oprávnenia pre jednotlivých užívateľov a skupiny.</p>
<p>Následne môžeme pomocou ACL zisťovať oprávnenia pre jednotlivé skupiny alebo jednotlivých užívateľov. Predstavme si situáciu, v ktorej by sme chceli zistiť, či redaktor <em>Redaktor 1</em> má oprávnenie pridať článok. Najprv zistíme cestu stromom pre uzol <em>Redaktor 1</em>, cesta je nasledovná <em>užívatelia → redaktor → Redaktor 1</em>. Následne môžeme získať jeho oprávnenia, ktoré môžeme zobraziť pomocou tabuľky následovne</p>
<table style="border:1px solid black">
<thead>
<tr>
<th style="width:150px">ARO uzol</th>
<th style="width:200px">Oprávnenia</th>
<th style="width:250px">Výsledok</th>
</tr>
</thead>
<tbody>
<tr>
<td>užívatelia</td>
<td>Deny all</td>
<td>nemá oprávnenie k pridaniu článku</td>
</tr>
<tr>
<td>redaktor</td>
<td>Allow „pridanie článku“</td>
<td>prístup povolený</td>
</tr>
<tr>
<td>Redaktor 1</td>
<td>Allow „pridanie článku“</td>
<td>prístup povolený</td>
</tr>
</tbody>
</table>
<p>Predchádzajúce časti boli teoretické a mali za cieľ podrobne vysvetliť fungovanie ACL. Teraz si poďme ukázať, ako inicializovať ACL v CakePHP.</p>
<h2>ACL v CakePHP</h2>
<p>Inicializácia ACL spočíva vo vytvorení databázových tabuliek, ktoré sú potrebné pre správne fungovanie. Defaultne je ACL v CakePHP založený na databáze (možnosťou je taktiež používať ACL bez databázy, ale v našom článku budeme používať ACL v spolupráci s databázou). Pri vytváraní tabuliek máme dve možnosti, použitie konzoly cakephp alebo import sql priamo do databázy. Pre tých, ktorí sú zoznámení s cakephp konzolou, stačí spustiť pomocou konzoly príkaz</p>
<pre><code>cake schema run create DbAcl</code></pre>
<p>Výpis konzoly by mal vypadať následovne</p>
<pre><code>---------------------------------------------------------------
Cake Schema Shell
---------------------------------------------------------------

The following tables will be dropped.
acos
aros
aros_acos

Are you sure you want to drop the tables? (y/n)
[n] &gt; y
Dropping tables.
acos updated.
aros updated.
aros_acos updated.

The following tables will be created.
acos
aros
aros_acos

Are you sure you want to create the tables? (y/n)
[y] &gt; y
Creating tables.
acos updated.
aros updated.
aros_acos updated.
End create.</code></pre>
<p>Pre tých, ktorí s konzolou zatiaľ nepracovali, stačí importovať sql súbor uložený v <em>app/config/sq/db_a­cl.sql</em> do vašej databázy. Následne sa nám v databáze vytvoria tri tabuľky</p>
<p><em>acos – zoznam ACO</em></p>
<p><em>aros – zoznam ARO</em></p>
<p><em>aros_acos – zoznam oprávnení ARO k ACO</em></p>
<p>Po úvodnej inicializácii máme všetko pripravené pre začatie používania ACL v CakePHP. V následujúcich častiach seriálu sa pustíme do samotnej implementácie. Vytvoríme si kompletnú aplikáciu používajúcu ACL a taktiež si ukážeme, ako automaticky naplniť tabuľku ACOs podľa existujúcich controllerov v našej aplikácii.</p>
<p>Rád uvítam vaše nápady, pripomienky a skúsenosti s ACL v diskusii k článku.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/05/27/access-control-list-v-cakephp-1-cast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
