Dar acceso a grupos de Joomla (o restringírselo) para cualquier componente

21 de Febrero de 2009 — Darío Ferrer

Traducción literal del artículo: Give Joomla backend managers access to any component! Control who has access! por Fotis Evangelou.

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
/ 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:

1
2
/ uncomment following to allow managers to edit modules
 //array( 'administration', 'edit', 'users', 'manager', 'modules', 'all' );

Reemplaza este código…

1
2
3
4
5
6
7
8
9
10
11
// 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 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' );

Con esto 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.

  • Bitacoras.com
  • Meneame
  • Twitter
  • del.icio.us
  • Facebook
  • Digg
  • Technorati
  • BarraPunto

Publicado en Joomla. 11 Comentarios »

11 comentarios

  • erika dijo:
    6 de Mayo de 2009 a las 11:25 am

    hola buen dia
    probe este codigo y si funciona muy bn grax por darlo a conocer.:)

    pero lo que yo quisiera que el manager tambien pudiera ver el virtuemart ya que mi pagina es un carrito de compras, se puede hacer eso?????

    agradeceria su ayuda
    saludos

  • gnumax dijo:
    4 de Junio de 2009 a las 4:47 pm

    Genial el TIP, la verdad es que mientras no se libere la 1.6 con permisos granulados, esta opción que comentas es extremadamente interesante.

    Gracias por el aporte. :)

  • Darío dijo:
    4 de Junio de 2009 a las 5:31 pm

    Hola @gnumax, me alegra que hayas encontrado utilidad en el artículo. De todas formas te recomiendo darle un vistazo a los últimos comentarios del artículo original creado por Fotis.

    Saludos.

  • misterioaqo dijo:
    9 de Agosto de 2009 a las 2:02 pm

    muy buen dato man!! a mi me gusta mucho buscar cambios asi de sencillos para estar instalando extensiones, molestas que a veces en vez de ayudar empeoran las cosas.

    pero tengo una pregunta:
    ¿Se podrá hacer restrincciones de la misma manera para categorias de contenidos? Por ejemplo para que un manager solo accesa a los artículos de la categoría A mientras que no pueda modificar artículos de una categoría B. ¿Esto será posible?

  • Darío Ferrer dijo:
    9 de Agosto de 2009 a las 3:55 pm

    Hola Misterioaqo,

    Todos los datos de usuario provienen de la base de datos y desde luego es posible programar un componente (si es que ya no existe) que asigne privilegios tal como mencionas. Sin embargo actualmente no puedo darte una guía, dado que abandoné Joomla desde hace mucho tiempo y he perdido el toque con éste.

  • misterioaqo dijo:
    12 de Agosto de 2009 a las 12:14 pm

    No importa, ya conseguí lo que necesitaba, el cliente que quería este trabajo tenía instalado el componente noixACL pero no funcionaba bien en Joomla 1.5 y tuve que hacerle las modificaciones necesarias. Un dato interesante que encontré y utilicé, son los rangos que usa Joomla para el ID de los grupos. Por ejemplo, para cualquier grupo externo que se cree, siempre van a tener un ID mayor a 30. Los grupos que vienen por defecto en Joomla tienen ID entre 20 y 30. Ya los que saben alguito de programación fácil me entenderán :P

  • sonnyvancleef dijo:
    28 de Septiembre de 2009 a las 10:46 am

    si me parece barbaro que no se usen los componentes para grupos ya que son muy complicados y te joden el sitio, se te tranca todo y no podes entrar nunca mas fue lo que me paso a mi
    asi que modifico el archivo a manito, y listo muy bueno el articulo aplasusos

  • Moises dijo:
    22 de Noviembre de 2009 a las 3:19 pm

    Hola, de haber sabido esto antes no me hubiese quemado tanto las pestañas… logre hacer todo esto despues de mucho cabecearme… y ahora he migrado a joomla 1.5 pero los archivos no son igual y aun no doy en el clavo…. alguien a logrado hacer esto mismo pero en joomla 1.5??? escribanme por favor… moisesneveu [at] gmail

  • Manuel Santiago dijo:
    7 de Abril de 2010 a las 7:43 pm

    Muchísimas gracias, muy útil!

    - Manuel

  • José Miguel Martin dijo:
    17 de Mayo de 2010 a las 6:48 am

    No entiendo, en que archivo pongo?

  • elkara dijo:
    4 de Junio de 2010 a las 11:45 am

    Yo a través del componente NOIXACL con el quería limitar el acceso en un grupo he conseguido hacer esto, pero pagando un precio demasiado alto.
    No puedo hacer que funcionen los botones de APLICAR, CERRAR y el botón de imágenes no aparece la opción de explorar para subir imágenes desde local al servidor.
    ¿Alguien sabría alguna posible solución?
    Gracias

Comentar este artículo

Nombre (Requerido)

Correo (No será publicado) (Requerido)

Sitio web

Secciones

Anteriores

comentarios recientes

@Andrés en Dictador Micheletti: Haré lo que sea para convencer a Obama: Darío…! y yo queme mataba de la risa viendo cómo los Testigos de...

@Daniel en Dos tips sobre Adobe Reader: Detener AcroRd32Info.exe e impedir actualizaciones automáticas: muchas gracias man!!! genial la info que...

@Sebastian en ¿Joomla Vs. Wordpress? (1ª parte): Hola, excelente artículo, actualmente me encuentro definiendo que CMS usar y ando evaluando entre...

@Alyen en The Post Thumbnail Vs. WP Smart Image II: Gracias Darío, espero tu respuesta. Otra cosa tengo la traduccion desde hace tiempo, te aviso...

@Andrés en Cómo extraer miniaturas de imágenes en Wordpress (2da revisión – Código mejorado): Hola Darío: Ya solucioné mi problema. -...

@Andrés en Cómo extraer miniaturas de imágenes en Wordpress (2da revisión – Código mejorado): Hola a todos: He seguido todos los pasos...

@uri en 240 plugins JQuery: buenas Darío, buena recopilación… estoy buscando un plugin para wordpress que al pinchar a una imagen me la...

@ramon en ¿Joomla Vs. Wordpress? (1ª parte): felicidades por el articulo y por esa capacidad de analisis. Voy a contar mi experiencia y voy a...

Darío Ferrer — Blog personal

Sitio desarrollado con Wordpress, software libre para un mundo libre.

60 consultas a la BD en 0,820 segundos. Blog alojado en DreamHost