You are here:GeoTux»Geo-Blogs»IDE»Accediendo a datos de QGIS Server con base en roles de usuario

Estadísticas

Invitados: 67
Usuarios registrados: 3232
Usuarios en línea:
-
Registrados hoy:
-

Registro

Redifusión (RSS)

Blogs y Noticias:
Recibe las actualizaciones en Geo-Noticias y Geo-Blogs

Recibir por e-mail
Recibir Geo-Noticias y Geo-Blogs por e-mail

¿Qué es esto?

Martes 07 de Mayo de 2019 03:43

Accediendo a datos de QGIS Server con base en roles de usuario

Written by  German Carrillo
Rate this item
(0 votes)

Uno de los requerimientos más frecuentes para servicios web geográficos que disponen datos sensibles es: cómo restringir el acceso a los mismos dependiendo el rol del usuario. Este post muestra una manera de restringir el acceso a tus servicios web geográficos en QGIS Server.

 

 

Instalación de QGIS Server en Windows

Para correr QGIS Server sobre Windows debes instalar un servidor web como Apache o NGINX. Este post no abordará la instalación en detalle, si conoces de servidores web y puedes instalar uno, genial! Si no conoces, perso quieres seguir este post en tu propio equipo, tienes básicamente dos opciones:

 

1. Descargar OSGeo4W for 64 bits y seguir las instrucciones de QGIS docs, o,

2. Descargar OSGeo4W for 32 bits (si, lo leíste bien). La versión de 32 bits del instalador de OSGeo4W incluye Apache, lo cual está bien para este demo. Por supuesto, en ambiente de producción deberías usar paquetes para 64 bits.

 

Te presente que este post está basado en rutas para la opción 2. Esto es, si eliges el instalador para 64 bits, debes tener cuidado con las rutas que involucran carpetas de OSGeo4W.

Si te decides por los paquetes para 32 bits, luego de descargar y ejecutar OSGeo4W para 32 bits, elige los siguientes 3 paquetes para la instalación: Apache 2, QGIS LTR and QGIS Server LTR. Una vez instalados, reinicia el sistema y ejecuta  ApacheMonitor.exe, ubicado en C:/OSGeo4W/apache/bin/ApacheMonitor.exe, el cual te permite controlar el estado del servidor Apache desde la barra de tareas.

Apache Mnitor in the task bar.

(Ignora el mensaje de "Activar Windows", es que nunca lo uso :P)

 

Publicando un servicio web geográfico

Para una introducción breve sobre cómo funciona QGIS Server y de lo que es capaz, podrías leer estas presentaciones: Introduction to QGIS Server and Taller de QGIS Server.

 

QGIS Server necesita un proyecto QGS/QGZ. Para un demo rápido puedes descargar un proyecto con sus respectivos datos desde este enlace.

Descarga el archivo ZIP y descomprímelo en C:/ de tal manera que puedas acceder a C:/qgis\\projects\\catastro.qgz y C:/qgis\\projects\\datos_catastro_taller_qgis_server.gpkg localmente.

 

Ahora que el proyecto de QGIS y sus datos están ubicados en esa carpeta específica (es una carpeta elegida para este demo, pero podrías usar otras rutas en tu servidor), puedes ir a la siguiente URL en tu navegador web:

http://localhost/qgis-ltr/qgis_mapserv.fcgi.exe?MAP=C:\qgis\projects\catastro.qgz&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

Esta es una petición GetCapabilities a un servicio WMS, entonces esperamos un XML como respuesta. Si obtienes algo como en la imagen, quiere decir que tu ¡QGIS Server está funcionando y aceptando peticiones!

 

¿Es así de sencillo?

¡Si! Bueno, también deberías saber acerca de un archivo ce configuración que le dice a Apache que ejecute QGIS Server cada vez que alguien llama:

http://localhost/qgis-ltr/qgis_mapserv.fcgi.exe?

Este archivo está en C:/OSGeo4W/httpd.d/httpd_qgis-ltr.conf

 

Si te interesa puedes echarle un vistazo al archivo y verás que hay algunas variables de entorno que se definen cada vez que Apache arranca. Estaremos reemplazando ese archivo con configuraciones más avanzadas a lo largo de este post, entonces ténlo presente.

 

¿Dónde están los datos?

Puedes usar QGIS de escritorio como cliente para los datos que QGIS Server está sirviendo.

Abre QGIS, ve a Capa --> Administrador de fuentes de datos --> WMS/WMTS y agrega una nueva conexión con la URL

http://localhost/qgis-ltr/qgis_mapserv.fcgi.exe?MAP=C:\qgis\projects\catastro.qgz&

Elige un nombre para la conexión, yo usaré wms_cadastre.

Adicionalmente, marca la opción "Ignorar orientación de los ejes (WMS 1.3/WMTS)" y haz clic en el botón Aceptar.

En el siguiente diálogo, conéctate al servicio, selecciona ambas capas, elige PNG como formato de salida y cambia el sistema de referencia a "WGS 84 / Pseudo-Mercator" (EPSG: 3857)

Clic en el botón Añadir para cargar las capas a QGIS. Ahora deberías ver algo como esto en el mapa:

 

¿Pero quién eligió esa simbología para los datos?

Quien publica define la simbología de la capa y otras configuraciones importantes. Deberías configurar tus datos y tus proyectos en QGIS (de escritorio) antes de publicarlos a través de QGIS Server. Este post no cubrirá este tema, pero puedes leer más al respecto en la  documentación de QGIS.

 

Habilitando plugins de Python para QGIS Server

Para hacer que QGIS Server cargue plugins de Python necesitamos:

 

1. Configurar un par de variables de entorno en el archivo de configuración de Apache: PYTHONPATH y QGIS_PLUGINPATH.

Por conveniencia, ya hemos definido esas variables por ti en httpd_qgis-ltr_python.conf. Borra el archivo de configuración que está ubicado en C:\OSGeo4W\\httpd.d\\, descarga el nuevo desde este enlace y ubícalo en C:\OSGeo4W\\httpd.d\\ folder. Ahora renómbralo a httpd_qgis-ltr.conf.

 

Si quieres, podrías abrir el archivo y observar los valores de PYTHONPATH y QGIS_PLUGINPATH.

 

Reinicia Apache usando el ícono de ApacheMonitor en la barra de tareas. Si tienes problemas al reiniciar Apache, ve a la sección Resolución de problemas al final del post.

 

2. Pon tu plugin de Python en la carpeta (C:\qgis\\plugins\\) que acabamos de definir en el archivo de configuración de Apache.

Primero, cargaremos un plugin "Hello Server" que responde con un mensaje personalizado cualquier petición donde el parámetro SERVICE sea "Hello" (puede ser en mayúsculas, minúsculas o cualquier combinación).

Entonces, crea la carpeta C:\qgis\\plugins\\, descarga este archivo ZIP y extrae su contenido en C:\qgis\\plugins\\.

Ve a un navegador web y visita la siguiente URL:

http://localhost/qgis-ltr/qgis_mapserv.fcgi.exe?MAP=C:\qgis\projects\catastro.qgz&SERVICE=HELLO

Si todo va bien, en lugar de un XML deberías obtener esta respuesta:

 

Plugin para el servidor: Restringiendo el acceso a un servicio web geográfico

Ahora que los plugins de Python están habilitados para el servidor, sigamos adelante. QGIS Server nos permite restringir el acceso a capas, objetos espaciales, atributos y los permisos de edición sobre todos ellos. ¡¡¡Estupendo!!!

 

Descarga el archivo ZIP del plugin "Control Access" desde aquí y extrae su contenido en C:\qgis\\plugins\\

 

De manera predeterminada el plugin no restringe el acceso a ningún dato. Estaremos modificando ligeramente el código Python (solo comentar o descomentar código) para ver el plugin en acción.

 

Restringir acceso basado en un extent (expresión)

Abre el archivo C:\qgis\\plugins\\access_control\\access_control.py, descomenta la línea 9 y comenta la línea 10. Le estamos diciendo a QGIS Server que bloquee cualquier geometría de cualquier capa que no intersecte el bounding box definido por las coordenadas -8245386.2, 525874.5 and -8245321.2, 525920.4.

Después de guardar el archivo y reiniciar Apache (de nuevo, si tienes problemas reiniciándolo, ve a la sección Resolución de problemas al final de este post), si accedemos de nuevo al servicio deberíamos ver únicamente esto (se agrega el extent en color lila solo para referencia):