Biblioteca

Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 

Seguramente a muchos nos ha ocurrido, al crear una web con el CMS Joomla más la potente extensión k2, donde hemos querido crear secciones de artículos con varios redactores distintos, correctores, publicadores, encontrarnos con la desagradable sorpresa de no poder crear un menú desde el front-end o parte central para que aquellos colaboradores, en muchos casos pueden ser completamente desconocidos para el creador de la web, en momentos iniciales, no tengan acceso a la parte de atrás o zona de administración de la misma.

 

 

Bien, tras buscar durante algunos días, y no poder cargar la versión 2.6.x de K2 para Joomla 1.7.x por dar un error en la instalación, me dispuse a instalar la versión 2.5.x de K2 e intentar buscar algún añadido que me diera la posibilidad descrita anteriormente, no lo conseguí encontrar de forma gratuita, así que, decidí probar a crear usuarios "Gestores" (Control de permisos para Joomla 1.7.x) que pudieran conectarse a un back-end restringido. Pero oh sorpresa, los permisos de los grupos de usuario que se han definido en k2, en la parte administrativa, no se aplican. Por lo tanto, un autor de artículos, el cual solo va a crear un documento, puede ver, los documentos del resto de compañeros, cambiarlos, eliminarlos, o incluso autopublicar sus propios documentos.

No está todo perdido, decidí utilizar una solución que combina los permisos Joomla 1.7.x con los grupos de usuario que podemos crean en K2, la idea por tanto es asignar permisos de Gestor, (click en la casilla de Gestor), quitar componente a componente (no son muchos) a los gestores la posibilidad de entrar en aquellos componentes o partes a los que no queramos que accedan, para esto tenéis bastantes manuales, no tiene mucho misterio, entrar en el menú de configuración/permisos de gestor y entrar en componente no permitir.

Bien, configuraremos los permisos de los grupos de usuarios en K2, y ahora vamos a rectificar unas líneas en los ficheros de K2. Quizá las modificaciones que os voy a mostrar no sean las que necesitáis algunos pero os dará una pista de por donde deberéis ir, para dejar resuelto vuestro problema. Para muchos otros, como para mí, creo que estas modificaciones son todo lo necesario.

Primera modificación

Seguramente no querremos que un usuario que solo vamos a habilitar para crear artículos, pero no queremos que los publique sin haber sido revisados, bien porque aun no confiamos en él, bien porque tengamos que revisarlos por el motivo que sea, cuando accedan al administrador como Gestores y Autores, podrán ver y modificar a parte de sus artículos, el resto de artículos, ya que, la restricción de solo modificar sus artículos, no será respetada. Para ello, vamos a introducir el siguiente código, para que, los autores, solo puedan ver los artículos que ellos han creado. El fichero que deberemos modificar será el ubicado en /raiz_sitio/administrator/components/com_k2/views/items/tmpl/default.php

Buscaremos las línea 119 y a continuación introduciremos este código:

 

 <!-- ETANI -->

 <?php

 //Vamos a crear una modificación para que si un usuario no puede editar artículos de otras personas es decir, $this->permissions->get('edit') es falso, solo mostraremos los artículos que ha escrito el editor

 jimport( 'joomla.access.access' );

 $user =& JFactory::getUser();

 $groups = JAccess::getGroupsByUser($user->id);

 //echo 'Id del usuario'.$user->id;

 /*

 Los grupos salen de la tabla usergroups para ello usamos los siguientes id, que serán los que pueden editar.

 4-> Editor (grupo de corrector en mi caso);

 5-> Publicacor

 7-> Administrador (gestor-administrador)

 8-> Super Usuario.



 */

 $grupo_puede_editar = array(4,5,7,8);

 foreach ($groups as $group){

 //echo $group;

 if (in_array ((int)$group ,$grupo_puede_editar)){

 $puede_editar = true;

 }

 }

 if ($puede_editar){

 echo '<h3 style="color:green"> '.$user->username.' Tiene permiso para  EDITAR documentos de OTROS usuarios </h3>';

 } else {

 echo '<h3 style="color:red"> '.$user->username.' NO Tiene permiso para  EDITAR documentos de OTROS usuarios, solo verá los suyos </h3>';

 }

 ?>

 <!--Etani-end-->

 

 

Como se puede intuir, la idea es buscar si el usuario puede editar o no, para luego, colocar un if que filtre aquellos $row que no deba ver el usuario. Esto lógicamente se hará después de foreach, localizamos por tanto la línea siguiente:

 

 <?php foreach ($this->rows as $key => $row): ?>

 

 

 

Y debajo incluiremos nuestro if:

 <!-- ETANI -->

 <?php

 //Vamos a crear una modificación para que si un usuario no puede editar artículos de otras personas es decir, $this->permissions->get('edit') es falso, solo mostraremos los artículos que ha escrito el editor

 if ($puede_editar || $row->author == $user->username):

 ?>

 <!--Etani-end-->

 

 

 

Lógicamente habrá que crear una sentencia de cierre de if, justo antes del cierre de foreach. Bien de esta forma, quizá poco eficiente, pero sencilla, conseguimos modificar la vista y además incluir un mensaje para los usuarios, que informe si están habilitados para cambiar artículos de otras personas.  Pero... esto nos deja un fleco suelto, si el autor entra en un artículo ya sea para editarlo o crea uno nuevo, aparecerán los campos de destacado y publicado, los cuales podrá cambiar a su antojo, ya que no se revisarán los permisos de grupos de usuario. Bien pues vamos a la segunda modificación.

Segunda modificación

Ha llegado la hora de controlar que un usuario, ya sea el corrector que va a revisar el artículo, o un autor, sino tienen permisos para publicar, no puedan ver estos 2 campos. La ventaja que da esta modificación es que, los documentos se crean por defecto como publicado a no, y destacado a no. Localizamos ahora el archivo ubicado en /raiz_sitio/administrator/components/com_k2/views/item/tmpl/default.phpla única diferencia con la dirección anterior, es que e lugar de editar la vista para items, lo haremos para item, sin la s final.

Localizaremos la línea 145 y justo debajo vamos a incluir este código:

 <!-- ETANI -->

 <!-- Vamos a modificar esta parte para que, esté en el sitio o no, solo deje publicar y destacar sí y solo sí tiene permiso de "publish" El problema viene

  porque isAdmin() devuelve a true, cuando estamos en la parte ADMINISTRATIVA de la web, habría que preguntarse si es ADMINISTRADOR

  $this->permissions->get('publish') es un persmiso que sale de la tabla  k2_user_groups, del campo permisos a 0 falso, a 1 si tiene el permiso.

  -->

 <?php /*if($this->mainframe->isAdmin() || ($this->mainframe->isSite() && $this->permissions->get('publish'))): */?>

 <?php

 /*

 //Para probar los permisos.

 $user =& JFactory::getUser();

 echo "<p>Tu usertype es {$user->usertype} el cual tiene un group id {$user->gid}.</p>";

 echo "<br>";

 if ($user->gid=='1000'){

 echo "Super User a true ";

 } else {

 echo "Super User a false ";

 }

 echo "<br>";

 if ($this->mainframe->isSite() && $this->permissions->get('publish')){

 echo "Permiso de publicación true ";

 } else {

 echo "Permiso de publicación false ";

 }

 //*/

 ?>

 <?php

 //Aquí escribimos la modificación para que si es super usuario, o tiene permiso k2 de publicación se mostrará este texto.

 $user =& JFactory::getUser();

 if($user->gid=='1000' || $this->mainframe->isSite() && $this->permissions->get('publish')): ?>

 <!-- ETANI-end --> 

Este código viene a sustituir la línea siguiente:

 <?php /*if($this->mainframe->isAdmin() || ($this->mainframe->isSite() && $this->permissions->get('publish'))): */?>

 

Que era la responsable de la no aplicación de los permisos de forma adecuada.

Conclusión final

Solo comentar que, estas 2 modificaciones, unidos a los permisos estándar de Joomla 1.7.x ( y seguramente aplicable a otras versiones ) va a darnos una cómoda, útil y flexible solución, rápida de parchear, y económica, para solucionar uno de los mayores dolores de cabeza de los administradores de sitios web, que quieren dar de forma controlada la palabra a sus usuarios.

Ficheros Adjuntos

En el enlace de debajo dejo mis 2 ficheros modificados, los he comprimido con el árbol de directorios que os encontraréis en el componente K2.

https://www.etani.es/descargas/com_k2.zip

Escribir un comentario


Código de seguridad
Refescar

Tecnologías empleadas para desarrollo de soluciones

(Hacer click para ampliar información)

 

             

Esta web actualmente usa cookies para su funcionamiento y mejora de experiencia de usuario. Si continua navegando consideramos que acepta el uso de cookies Más información