Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/03/2008, 14:49
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Tutorial: Controlar accesos de grupos a cualquier componente

Traduje este tuto porque me resultó muy útil para algo que estoy haciendo ahora:

Texto original: Give Joomla backend managers access to any component! Control who has access!.
Autor: Fotis Evangelou - Joomla Works.

Uno de los problemas más comunes que enfrentan los desarrolladores cuando finalizan un proyecto basado en Joomla! Es la administración de acceso de usuarios o, para ser más exactos, la falta de control en el acceso de éstos. Hay numerosas soluciones para solventar este aspecto, tales como un componente comercial de Joomla Solutions llamado JBAM (Joomla Backend Access Management - $125) y el componente gratuito ACLPlus de Byostech. Ambos son hacks a los archivos del core y cada uno tiene sus inconvenientes, lo cual provoca que muchos usuarios/desarrolladores puedan mostrarse escépticos a la hora de usarlos.

No me malinterpreten, pero JACL es dependiente de la versión y JBAM es una forma complicada (y costosa) cuando todo lo que quieres es dar acceso a tus administradores a –por ejemplo- el componente de Encuestas.

Entonces ¿cuáles otras opciones podemos tener? Sólo modifica un poco un archivo por ti mismo y podrás habilitar a cualquier grupo el acceso al componente que quieras.

El archivo es éste: includes/gacl.class.php

Podemos asignar fácilmente acceso a determinados componentes para determinados grupos. Supongamos que quieres darle a tu Administrador los privilegios de añadir/eliminar cuentas de usuarios desde el panel de administración, pero no acceso a módulos o mambots. O bien quisieras habilitar a tus Managers para acceder a componentes de terceros tales como ArtBanners, lo cual resulta bastante lógico si trabajas con mucho contenido y deseas distribuir tareas diferentes a distintas personas.

Así que basta con modificar o añadir algunas líneas en el archivo includes/gacl.class.php y podremos controlar totalmente a qué partes del sitio pueden acceder los 3 grupos predefinidos del backend (Super administrador, Administrador y Manager).

Les daré un ejemplo de lo que usualmente hago.

1.- Restringir acceso a Administradores (no Super administradores) a módulos y mambots:

Aproximadamente en la línea 136, agrega barras de comentario a estas líneas, tal como aparecen a continuación:

Código:
// access to modules
//$this->_mos_add_acl( 'administration', 'install', 'users', 'administrator', 'modules', 'all' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'super administrator', 'modules', 'all' );

//$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'modules', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'modules', 'all' );

// access to mambots
//$this->_mos_add_acl( 'administration', 'install', 'users', 'administrator', 'mambots', 'all' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'super administrator', 'mambots', 'all' );

//$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'mambots', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'mambots', 'all' );
Como puedes ver, se han comentado todas las líneas referentes a "administrator". Así que cada vez que abra una nueva cuenta de usuario y darle privilegios de Administrador, sabré que nunca llegará a ver los menús de módulos y mambots.

2. Habilitar acceso a los Managers y Administradores a ciertos componentes:

Aprox. en la línea 152 donde dice:

Código:
// uncomment following to allow managers to edit modules
//array( 'administration', 'edit', 'users', 'manager', 'modules', 'all' );
Reemplaza este código:

Código:
// access to components
$this->_mos_add_acl( 'administration', 'install', 'users', 'administrator', 'components', 'all' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'super administrator', 'components', 'all' );

$this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'components', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'all' );

$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_newsflash' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_frontpage' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_media' );
// ** add additional components for a manager as desired, or give access to all
con las siguientes líneas:

Código:
// Custom Access - Start
// added for administrators' access
$this->_mos_add_acl( 'administration', 'install', 'users', 'administrator', 'components', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_massmail' );
$this->_mos_add_acl( 'administration', 'manage', 'users', 'administrator', 'components', 'com_massmail' );
$this->_mos_add_acl( 'administration', 'manage', 'users', 'administrator', 'components', 'com_trash' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_poll' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_media' );

$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_joomfish' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_yanc' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_artbanners' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_virtuemart' );

// added for managers' access
$this->_mos_add_acl( 'administration', 'install', 'users', 'manager', 'components', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_massmail' );
$this->_mos_add_acl( 'administration', 'manage', 'users', 'manager', 'components', 'com_massmail' );
$this->_mos_add_acl( 'administration', 'manage', 'users', 'manager', 'components', 'com_trash' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_poll' );
De esta manera hemos permitido el acceso de Administradores a los componentes: Correo masivo, Papelera, Encuestas, JoomFish y ArtBanners, pero NO a YanC o VirtueMart (el acceso al administrador de media es dado como estándar). Esto no sería posible con los controles predeterminados de Joomla! para el control de accesos de usuarios.

Conclusión

De esta manera podemos "distribuir" fácilmente los privilegios de acceso de 2 grupos de usuarios (Administrador y Manager) a determinados componentes sin necesidad de instalar un componente fabricado por terceros.

Nota que existen algunas restricciones para ciertos grupos de usuarios en Joomla! de forma predeterminada que no pueden ser cambiados por los "hacks" mencionados. Por ejemplo, los Managers no pueden manejar la Administración de Usuarios ni pueden accesar a la configuración Global.

Pero en la mayoría de los casos, todo lo que necesitarás es habilitar acceso a tus Managers a los componentes de terceros, y probablemente restringir a los Administradores para que no "jueguen" con módulos y mambots.