<?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>Nuevascreaciones &#187; phpGACL</title>
	<atom:link href="http://nuevascreaciones.com/archives/tag/phpgacl/feed" rel="self" type="application/rss+xml" />
	<link>http://nuevascreaciones.com</link>
	<description>De todo un poco</description>
	<lastBuildDate>Tue, 28 Apr 2009 09:01:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Permisos Joomla! 1.5.x (phpGACL)</title>
		<link>http://nuevascreaciones.com/archives/62</link>
		<comments>http://nuevascreaciones.com/archives/62#comments</comments>
		<pubDate>Tue, 30 Dec 2008 02:06:03 +0000</pubDate>
		<dc:creator>makensi</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpGACL]]></category>

		<guid isPermaLink="false">http://nuevascreaciones.com/?p=62</guid>
		<description><![CDATA[Durante este último mes he estado trabajando un poco con Joomla! 1.5.x. Tras realizar mi última instalación, me surgio la duda ¿que pasa si quiero disponer de grupos y permisos distintos de los que Joomla! ofrece?. Ya sabia desde hacia tiempo que Joomla! hacia uso de phpGACL, pero lo que realmente me sorprendio tras revisar [...]]]></description>
			<content:encoded><![CDATA[<p>Durante este último mes he estado trabajando un poco con <a href="http://www.joomla.org/">Joomla!</a> <strong>1.5.x</strong>. Tras realizar mi última instalación, me surgio la duda ¿que pasa si quiero disponer de grupos y permisos distintos de los que <a href="http://www.joomla.org/">Joomla!</a> ofrece?. Ya sabia desde hacia tiempo que <a href="http://www.joomla.org/">Joomla!</a> hacia uso de <a href="http://phpgacl.sourceforge.net/">phpGACL</a>, pero lo que realmente me sorprendio tras revisar un poco es que no hace uso de esta (al menos no en su totalidad).<span id="more-62"></span></p>
<p>Para empezar el responsable de gestionar los permisos de todos los elementos que componen <a href="http://www.joomla.org/">Joomla!</a> es la clase <code><strong>JAuthorization </strong></code>(<code>~/libraries/joomla/user/authorization.php</code>). Esta clase carga la ACL de <a href="http://www.joomla.org/">Joomla!</a> según lo dispuesto en su constructor. Un ejemplo es:<br />
<code><br />
$this-&gt;addACL( 'com_frontpage', 'manage', 'users', 'super administrator' );<br />
</code><br />
En este ejemplo obtenido de este constructor se observa que: los usuarios del grupo <strong>Super Administrator</strong> pertenecientes a la sección <strong>Users</strong> para el item <code>com_frontpage </code>(pagina principal de Frontend) dispone del permiso manage. ¿Facíl no?</p>
<p>Ya disponemos de la forma en que se lleva acabo ahora solo falta el mecanismo y la herramienta. La herramienta es un componente denominado <a href="http://extensions.joomla.org/extensions/access-&amp;-security/group-access/4758/details">JXtended Control</a> el cual nos permite gestionar desde el Backend de <a href="http://www.joomla.org/">Joomla!</a> las tablas de <a href="http://phpgacl.sourceforge.net/">phpGACL</a>(no entraremos en los detalles de las tablas ya que nos extenderiamos demasiado) de una forma más simplificada.</p>
<p>Una vez instalado accedemos a <strong>Componentes -&gt; <a href="http://extensions.joomla.org/extensions/access-&amp;-security/group-access/4758/details">Control</a></strong> (en el Backend), seleccionamos configuración y marcamos en el combo <strong>Extension Mode</strong> como <strong>Advanced Mode</strong>, guardamos y actualizamos la pagina (no refresca la configuración <img src='http://nuevascreaciones.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>Tras refrescar aparecera un menú más extenso peor nos centraremos solamente en:</p>
<ul>
<li><strong>Section</strong>, con la opción <strong>Tipo </strong>a <strong>Permissions(ACOs)</strong></li>
<li><strong>Objects</strong>, con  					 						la opción <strong>Filter Type</strong> a <strong>Permissions(ACOs)</strong></li>
<li><strong>Groups</strong>, con la opción <strong>Filter Group Type</strong> a <strong>Users Groups(AROs)</strong></li>
<li><strong>Rules</strong></li>
</ul>
<p>Bien si nos fijamos en el ejemplo anterior obtenido del constructor de JAuthorization, para agregar el mismo permiso basta con agregar:</p>
<ul>
<li>Una <strong>Section</strong> con valor <code><strong>com_frontpage</strong></code> (como nombre suele ser útil usar el mismo que valor tanto para este caso como para los siguientes).</li>
<li>Un <strong>Object</strong> con valor <code><strong>manage</strong></code> y que pertenezca a la seccion <code><strong>com_frontpage</strong></code>.</li>
<li>En este caso no es necesario agregar un <strong>Group</strong> ya que podemos hacer uso de los existentes.</li>
<li>Finalmente una <strong>Rule</strong> en la que agregaremos un texto descriptivo en el campo Note, marcamos el checkbox correspondiente a <strong>com_frontpage &#8211; manage</strong> y el checkbox correspondiente a <strong>Super Administrator</strong>.</li>
</ul>
<p>Con esto ya disponemos de una regla igual a la del ejemplo por lo que el resto es generar las que deseemos (es aconsejable crear todas las del grupo <strong>Super Administrator</strong> para evitar problemas en el siguiente paso).</p>
<p>El mecanismo para hacer que sea <a href="http://phpgacl.sourceforge.net/">phpGACL</a> el que gestione los permisos es cambiar en la clase <code><strong>JAuthorization</strong></code> el valor de la variable <code>$_checkMode</code> a <code>1</code>. Este es el código que debemos buscar:<br />
<code><br />
/**<br />
* The check mode.  0 = Joomla!, 1 = phpGACL<br />
* @var    int<br />
*/<br />
var $_checkMode = 0;<br />
</code><br />
Una vez realizado este cambio si no disponemos previamente de los permisos necesarios(por eso es necesario agregar todos los de <strong>Super Administrador</strong>) muchos de los menús del Backend desapareceran.</p>
<p>Hasta aquí ya disponemos de un mecanismo para agregar nuevos grupos y permisos pero obtener los permisos de cada modulo y componente instalado puede ser un engorro. Lo más aconsejable es agregar a la clase <code><strong>JAuthorization</strong></code> en la función <code><strong>acl_check</strong></code> algo así:<br />
<code><br />
echo sprintf("(%s)<br />
$aco_section_value, $aco_value, $aro_section_value,<br />
$aro_value, $axo_section_value, $axo_value,<br />
$root_aro_group, $root_axo_group &lt;br /&gt;",<br />
parent::acl_check( $aco_section_value, $aco_value,<br />
$aro_section_value, $aro_value, $axo_section_value,<br />
$axo_value, $root_aro_group, $root_axo_group )?"true":"false");<br />
</code><br />
Esto nos permitira ver en la pagina las reglas y el valor true si esta permitida la accion y false en caso contrario.</p>
<p>Aunque no he entrado en mucho detalle espero escribir en un futuro otro post con una explicación algo más extensa.</p>
]]></content:encoded>
			<wfw:commentRss>http://nuevascreaciones.com/archives/62/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
