Skip to content


Permisos Joomla! 1.5.x (phpGACL)

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 un poco es que no hace uso de esta (al menos no en su totalidad).

Para empezar el responsable de gestionar los permisos de todos los elementos que componen Joomla! es la clase JAuthorization (~/libraries/joomla/user/authorization.php). Esta clase carga la ACL de Joomla! según lo dispuesto en su constructor. Un ejemplo es:

$this->addACL( 'com_frontpage', 'manage', 'users', 'super administrator' );

En este ejemplo obtenido de este constructor se observa que: los usuarios del grupo Super Administrator pertenecientes a la sección Users para el item com_frontpage (pagina principal de Frontend) dispone del permiso manage. ¿Facíl no?

Ya disponemos de la forma en que se lleva acabo ahora solo falta el mecanismo y la herramienta. La herramienta es un componente denominado JXtended Control el cual nos permite gestionar desde el Backend de Joomla! las tablas de phpGACL(no entraremos en los detalles de las tablas ya que nos extenderiamos demasiado) de una forma más simplificada.

Una vez instalado accedemos a Componentes -> Control (en el Backend), seleccionamos configuración y marcamos en el combo Extension Mode como Advanced Mode, guardamos y actualizamos la pagina (no refresca la configuración :P ).

Tras refrescar aparecera un menú más extenso peor nos centraremos solamente en:

  • Section, con la opción Tipo a Permissions(ACOs)
  • Objects, con la opción Filter Type a Permissions(ACOs)
  • Groups, con la opción Filter Group Type a Users Groups(AROs)
  • Rules

Bien si nos fijamos en el ejemplo anterior obtenido del constructor de JAuthorization, para agregar el mismo permiso basta con agregar:

  • Una Section con valor com_frontpage (como nombre suele ser útil usar el mismo que valor tanto para este caso como para los siguientes).
  • Un Object con valor manage y que pertenezca a la seccion com_frontpage.
  • En este caso no es necesario agregar un Group ya que podemos hacer uso de los existentes.
  • Finalmente una Rule en la que agregaremos un texto descriptivo en el campo Note, marcamos el checkbox correspondiente a com_frontpage – manage y el checkbox correspondiente a Super Administrator.

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 Super Administrator para evitar problemas en el siguiente paso).

El mecanismo para hacer que sea phpGACL el que gestione los permisos es cambiar en la clase JAuthorization el valor de la variable $_checkMode a 1. Este es el código que debemos buscar:

/**
* The check mode.  0 = Joomla!, 1 = phpGACL
* @var    int
*/
var $_checkMode = 0;

Una vez realizado este cambio si no disponemos previamente de los permisos necesarios(por eso es necesario agregar todos los de Super Administrador) muchos de los menús del Backend desapareceran.

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 JAuthorization en la función acl_check algo así:

echo sprintf("(%s)
$aco_section_value, $aco_value, $aro_section_value,
$aro_value, $axo_section_value, $axo_value,
$root_aro_group, $root_axo_group <br />",
parent::acl_check( $aco_section_value, $aco_value,
$aro_section_value, $aro_value, $axo_section_value,
$axo_value, $root_aro_group, $root_axo_group )?"true":"false");

Esto nos permitira ver en la pagina las reglas y el valor true si esta permitida la accion y false en caso contrario.

Aunque no he entrado en mucho detalle espero escribir en un futuro otro post con una explicación algo más extensa.

Posted in Desarrollo. Tagged with , , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.