MediaWiki – NamespacePermissions
1. Introducción
En algunas ocasiones la securización que viene por defecto en las wikis, como es el caso de mediawiki, no es suficiente. El nivel de permisos es muy básico a nivel de grupos y namespaces, siendo necesario instalar extensiones que permitan mejorarlo. NamespacePermissions es una de esas extensiones. Por defecto MediaWiki sólo permite definir el rol de edición de los namespace personalizados, sin tener la posibilidad de poder definir otros tipos de permisos como read, move, etc. Con la extensión que veremos en este tutorial seremos capaces de aumentar el control sobre los namespaces que creemos en nuestra wiki, siendo capaces de aplicar diferentes roles a cada grupo.
2. NamespacePermissions
Como hemos dicho antes, NamespacePermissions es una extensión que podemos añadir a MediaWiki para ampliar los permisos que podemos configurar en los namespaces. Aquellos que habéis trabajado con esta wiki sabréis que el único permiso que podemos configurar para cada grupo de usuarios en un namespace, es el rol de edición. Si quisiéramos aplicar permisos de lectura o de otro tipo no podríamos hacerlo. Si esta es nuestra situación tendremos que emplear una de las muchas extensiones que existen en MediaWiki para poder aplicar permisos a nuestra páginas o namespaces.
Con este parche podremos aplicar una gestión de acceso flexible para los namespace personalizados que tengamos, es decir, seremos capaces de configurar en cada namespace creado permisos de grano fino a nivel de grupo. Por ejemplo, imaginaros que queremos que un determinado namespace sólo pueda ser leído por un determinado grupo de la wiki, restringiéndose su acceso al resto de grupos, o que sólo un determinado grupo de la wiki tenga permisos para editar o mover las páginas de un namespace. Este tipo de situaciones son las que nos va a resolver NamespacePermissions.
3. Instalación
3.1 Descargamos el fichero NamespacePermissions.php
Realmente no existe un fichero como tal para descargar. Tendremos que copiar el contenido del fichero que se encuentra en esta url http://www.mediawiki.org/wiki/Extension:NamespacePermissions#Source_of_NamespacePermissions.php y guardarlo con el nombre NamespacePermissions.php.
3.2 Copiar el fichero NamespacePermissions.php a la carpeta de extensions de nuestro servidor.
Una vez que tengamos el fichero NamespacePermissions.php, lo copiamos a la carpeta «extensions» en el path donde hayamos instalado la MediaWiki. Habitualmente este path se encuentra en «/var/lib/mediawiki».
3.3 Añadir la extensión al fichero LocalSettings.php.
A continuación, para poder utilizar NamespacePermission, tendremos que añadirlo al final del fichero LocalSettings.php (situado en el path de instalación de MediaWiki /var/lib/mediawiki) o después del uso de las variables $wgExtraNamespaces y $wgGroupPermissions.
En nuestro caso el fichero quedaría algo así como:
define("NS_ADICTOS",100); define("NS_ADICTOS_TALK",101); $wgExtraNamespaces[NS_ADICTOS]="Adictos"; $wgExtraNamespaces[NS_ADICTOS_TALK]="Adictos_Talk"; require_once( "$IP/extensions/NamespacePermissions.php" );
4 Trabajando con NamespacePermissions
Instalada la extensión en nuestra wiki, sólo nos queda sacarle partido. Lo primero es crear en el fichero LocalSettings.php los namespaces sobre los que vamos a aplicar las restricciones de acceso.
4.1 Creando un namespace personalizado.
MediaWiki permite crear nuestros propios namespaces utilizando el array $wgExtraNamespaces, en el que definimos el identificar del namespace y una descripción. Los identificadores que se elijan para los namespaces personalizados comenzaran a numerarse a partir de 100 ya que mediaWiki tiene reservados del 0 al 99 para los suyos.
Siempre que creemos un nuevo namespace, deberemos crear otro utilizado por mediaWiki para almacenar las conversaciones. La única restricción será que el identificador asignado de este nuevo namespace debe ser correlativo, es decir, si creamos un namespace con el identificador 130 el namespace de conversaciones tendría que ser 131.
Por ejemplo vamos a crear el namespace Adictos (recordad que estas líneas deben estar antes que la inclusión del fichero NamespacePermissions.php):
$wgExtraNamespaces[100]="Adictos"; $wgExtraNamespaces[101]="Adictos_Talk";
Para que nuestro fichero de configuración quede más legible podemos definir unas constantes para los identificadores de cada namespace.
define("NS_ADICTOS",100); define("NS_ADICTOS_TALK",101); $wgExtraNamespaces[NS_ADICTOS]="Adictos"; $wgExtraNamespaces[NS_ADICTOS_TALK]="AdictosTalk";
4.2 Asignación de permisos a usuarios
Concluido el proceso de creación de nuestro namespace, el siguiente paso es aplicar permisos de acceso a los usuarios. NamespacesPermissions crea automáticamente dos grupos de usuarios en MediaWiki por cada namespace.
El primero, con el nombre de ns[NombredelNamespace]RW, con el que el usuario podrá realizar las acciones de lectura, edición, creación y traslado de las páginas, mientras que el segundo sólo permite a los usuarios poder acceder a las mismas (creado con el nombre de ns[NombredelNamespaceRO]).
Para comprobar que MediaWiki ha creado los grupos para nuestro namespace «Adictos», accedemos a la opción «páginas especiales» y pulsamos sobre el enlace «Permisos del grupo de usuarios». En esta página se muestra todos los grupos que actualmente existen en mediaWiki con los roles asignados a cada uno de ellos.
Ahora sólo nos queda asignar el grupo adecuado a los usuarios. Para ello accedemos a la página «Configuración de permisos de usuarios» que se encuentra dentro de las páginas especiales. Se nos pedirá el nombre del usuario que queremos modificar, y una vez introducido pulsamos sobre el botón «Modificar grupos de usuarios».
A continuación se nos mostrarán todos los grupos disponibles; estarán activos aquellos que el usuario tenga asignados. Como podemos ver en la imagen, junto al resto de grupos, encontramos los nuevos creados por NamespacesPermissions.
Asignamos al usuario el grupo para acceder al namespace «Adictos» y pulsamos sobre el botón «Guardar grupos de usuarios». A partir de este momento el usuario podrá acceder a las páginas de este namespace.
5 Configuración avanzada
Si los grupos creados no son los adecuados para nuestra situación o necesitamos crear otros con otra combinación de permisos, podemos hacerlo a través del fichero LocalSettings.php. Sólo tendremos que utilizar la variable $wgGroupPermissions de MediaWiki, con la que podremos asignar permisos a grupos. Vamos a verlo mejor con un ejemplo, imaginaos que necesitamos crear un grupo que tenga permisos de lectura y edición, pero que no pueda crear ni mover páginas. Por defecto, este tipo de permisos sobre un namespace no existe, con lo que tendremos que crearlo nosotros mismos de la siguiente manera: $wgGroupPermissions[NombreDelGrupo][PermisosSobreNamespace]=true/false.
Para nuestro ejemplo quedaría asi:
$wgGroupPermissions['adictos_group']['ns100_read'] = true; $wgGroupPermissions['adictos_group']['ns100_edit'] = true; $wgGroupPermissions['adictos_group']['ns100_create'] = false; $wgGroupPermissions['adictos_group']['ns100_move'] = false;
Si os dais cuenta, sobre la matriz wgGroupPermissions, primero indicamos el nombre del grupo «adictos_group» y después el tipo de permiso. NamespacesPermissions utiliza su propia nomenclatura sobre este último. El formato es el siguiente ns[IdentificadorDeNamespace][TipoDePermiso], donde el [identificadorDeNamespace] corresponde en nuestro caso con 100 y en [TipoDePermiso] el permiso que gestiona internamente mediaWiki: read, create, move, edit, etc (para más información sobre los tipos de permisos pulsa )
6 Creación de una página en un namespace
Por último sólo nos queda crear páginas en el namespace. El proceso es el mismo que para cualquier pagina, excepto que hay que añadir el nombre del namespace antes que el nombre de la página separado por dos puntos. Por ejempplo: [[Adictos:Prueba namespace autentia]]
7 Conclusión
Hemos visto cómo configurar la MediaWiki para extender los permisos básicos de ésta. Es un proceso sencillo y que nos da mucha potencia en aquellas situaciones donde queramos que ciertas partes de la wiki estén restringidas a determinados usuarios.