Su consultor TI

Conozca su infraestructura, mejore lo que necesite

De como mejorar la seguridad de los usuarios, los permisos y los roles en Navision

Si pensáis u os han asegurado que el control eficiente de los usuarios o la asignación de permisos o características se limita a los roles de Navision, creo que os podría resultar interesante seguir leyendo.

Voy a comentaros como he solucionado yo el problema en muchas instalaciones de clientes y como gestiono gran cantidad de permisos y grupos de trabajo en todo tipo de empresas sin usar el (para mí por lo menos) odioso sistema de seguridad por roles de Navision.

Antes de nada, plantearé el marco del problema para el que esta solución está pensada, es decir, que necesidad funcional intenta cubrir:

  • Está pensada para empresas u organizaciones con varios usuarios (a mayor número más se nota la mejora).
  • Dichos usuarios tienen, en muchos casos, tareas distintas.
  • Organización con gran casuística en cuanto a los permisos de cada usuario o grupos de usuarios.
    • Acceso a los mismos formularios pero con distintos permisos de acceso (lectura, modificación, creación…).
    • Acceso a los mismos formularios pero con parte de ellos ocultos en función del usuario (no me refiero a distintos formularios de similar diseño).
    • Restricción de cualquier tipo acciones o procesos.
    • Cualquier cosa que se os ocurra que se pueda personalizar para cada usuario, ya sea a nivel de permisos o de acciones.
  • Toda la gestión de los usuarios se debe realizar de forma eficiente y rápida por el propio personal de la empresa, incluso por personal que no pertenezca al departamento de sistemas sino, por ejemplo, a RRHH u organización.

Ante este problema, me he encontrado con distintas soluciones ofrecidas por los “partners” que normalmente no se calientan mucho la cabeza con estos temas. Podría resumirlas en estas tres opciones:

  1. Se configuran una serie de roles, según el método nativo de Navision, lo que es muy costoso e ineficaz, aparte de que tiene que hacerse por personal con gran conocimiento del programa.
  2. Se comienzan a crear indiscriminadamente permisos con booleanos en la tabla 91 de Navision y después se esparce el código de verificación por el desvalido Navision, lo que es una locura para cualquier posterior gestión de usuarios o cambios de versión, aparte de ser una práctica particularmente horrorosa de programación (en mi opinión, de nuevo…).
  3. No se hace nada y se les da a todos el permiso de SUPER… Parece una soberana burrada, pero no os podéis imaginar la cantidad de veces que me lo he encontrado y la de desastres o por lo menos “cagadas” que ha provocado.

Para los que han optado por implementar la opción uno y crear permisos asignando roles o creando roles nuevos en Navision, especificando directamente permisos sobre tablas, formularios e informes, estoy seguro de que un mensaje similar a “El usuario xxxx no tiene permisos de yyyy sobre la tabla wwww” les será bien conocido.

Esa opción, sobre el papel muy robusta, es en la práctica inviable, por lo menos en aquellas empresas en la que los perfiles de los usuarios vayan más allá de un mero usuario con todos los permisos y otros con menos permisos pero perfectamente definidos.

Definir un perfil de usuario con roles es extremadamente delicado y complejo y en la práctica totalidad de implementaciones, una vez definidos saltan errores durante semanas o incluso meses que se tienen que ir depurando por los programadores hasta que se solucionan ¿¿todos??.

Aparte del problema anterior, una vez definidos esos dos o tres perfiles, todo el personal de la empresa se debe asignar a uno de ellos, no hay posibilidad de hilar más fino, lo que en la práctica, es siempre necesario.

Todo esto provoca la mayoría de las veces que muchos usuarios acaben con el rol de SUPER lo que, como ya he comentado, es lo peor que podemos hacer, por lo menos con usuarios generales.

Si tiramos por el camino del medio y pasamos por la opción dos, es decir, comenzar a meter código indiscriminadamente en formularios, tablas o manejadores de eventos, al final acabaremos con un desastre inmanejable, imposible de migrar o subir de versión y muy poco funcional.

Es lo que suele pasar cuando alguien programa de oído o el “partner” correspondiente no se quiere calentar la cabeza (pero sí cobrar las horas) ante peticiones de los clientes similares a:

  • ¡Solo fulano y sotano tienen que acceder al inventario! (o cualquier otra cosa)
  • Necesito que solo podamos entrar al histórico de compras los de mi departamento.
  • Nadie más que mengana y su compañera deben poder registrar proveedores.
  • Cualquier otra cosa que se os pase por la cabeza, por peregrina que sea.

Ni que decir tiene que para peticiones tan específicas es totalmente inútil el tratar de implementar la seguridad mediante roles.

En estos casos, el código se esparce como una infección por los lugares más insospechados y suelo encontrarme dos variantes, una de ellas mala y la otra peor, para verificar los permisos:

  1. Codificar los permisos en la tabla 91 de configuración de usuarios, que suele crecer desmesuradamente con elementos booleanos o de tipo opción hasta ser inmanejable. Además para asignar permisos hay que acceder a ella directamente por alguien con conocimientos. La verificación de permisos se hace consultando la tabla en cada lugar necesario con pegotes de código suelto.
  2. Lo peor del mundo, incluir códigos sueltos indiscriminadamente del tipo “IF USERID<>’MANOLO’ THEN ERROR” o la versión pro “IF NOT(USERID IN ['MANOLO','PEPE']) THEN ERROR”. Esto si que es lo peor de lo peor a la hora de una posterior gestión.

Hasta ahora no he aportado nada, solo he criticado, pero a continuación os mostraré y describiré la solución que yo he desarrollado e implementado en muchos clientes a plena satisfacción.

Funciona en cualquier versión de Navision, desde la 2.01 en adelante y como primera pincelada os dejo esta captura de pantalla de un cliente dedicado a la distribución, con multitud de peculiaridades y departamentos de ventas compras y almacén muy particulares.

Pinchad en la imagen para ampliarla y poder observarla en detalle, además de algunas explicaciones.
Pantalla de gestión de usuarios

Desde esta pantalla, cualquier persona o personas designadas de la organización puede gestionar los permisos de cada empleado en unos pocos clics de ratón. Entre otras cosas, prácticamente imposibles antes se podría:

  • Gestionar de forma visual e inmediata los permisos.
  • No necesitar personal externo o del departamento de sistemas para manejar este tema tan crítico.
  • Poder saber de forma inmediata que personas pueden hacer cada cosa.
  • Crear un nuevo usuario con un solo clic de ratón.
  • Copiar roles de un usuario a otro de golpe.
  • Asignar menús.
  • Cambiar contraseñas.
  • Activar o desactivar usuarios.
  • Asignar usuarios a almacenes o grupos.

Se pueden hacer más cosas puesto que es personalizado para cada cliente, este que os muestro es solo un ejemplo.

En la siguiente imagen os muestro un detalle de la pestaña de permisos de almacén, donde podéis ver la variedad de opciones presente. En este caso también realicé la integración entre Navision y el SGA ADAIA de Leuter (Sistema de Gestión de Almacén).
Permisos de almacén
Otro detalle que me gustaría remarcar, es el menú de acciones:

Acciones sobre usuariosAquí veréis varias cosas importantes que permiten que la gestión de usuarios sea asequible para casi cualquiera:

  • Crear usuario nuevo. Realiza todas las tareas que de otra forma deberían realizarse a mano por personal de sistemas en las tablas 91, 2000000002 y 2000000003 entre otras varias cosas.
  • Copiar usuario. Nos permite duplicar totalmente un usuario con otro nombre y contraseña, lo que evita una cantidad enorme de trabajo repetitivo.
  • Cambiar contraseña. Sin necesidad de editar a mano la tabla 2000000002.
  • Copiar menú. Nos permite asignar la configuración del panel de navegación lateral que existe desde Navision 4.0 entre dos usuarios sin necesidad de ir marcando los elementos uno a uno.

Espero que os haya parecido interesante. Yo por mi parte puedo garantizaros que si implantáis esta u otra solución similar ganaréis mucho en independencia y en seguridad de uso.

Por si alguno tiene inquietudes más técnicas, la implementación se realiza limpiamente sin tocar ninguna tabla del sistema. Los permisos extra y grupos de usuarios, si la instalación los requiriese (la del ejemplo no) se almacenan en una tabla independiente de la 91.

Todo el código necesario para la gestión de los permisos se coloca en una codeunit a tal efecto creada y lo más que aparece insertado en el resto de Navision son sencillas llamadas a una función de dicha codeunit, por lo que se trata de una aproximación limpia y fácil de actualizar y mantener.

Además de esto, se define para todos los usuarios un único rol de Navision no excesivamente restrictivo para evitar que tengan el peligroso SUPER y el resto se le deja a este módulo.

Si tenéis interés en verla funcionar o que os haga una valoración para implantarla en vuestro ERP podéis contactar conmigo.

4 Comentarios

Nuevo comentario
    1. Hola Martín, perdona que haya tardado en responderte, pero estoy un poco liado estos días.

      Sobre lo que preguntas, es imposible responderte sin analizar tu caso en concreto. El ejemplo que pongo en el blog es uno de los más complejos que he implementado, con decenas de permisos para cada departamento, incluso por cada delegación a la que pertenezca el usuario. No se puede comparar a un caso más sencillo con unos cuantos permisos y poco más.

      Aparte de eso, es un desarrollo totalmente a medida en cada caso, puesto que usa tablas, formularios y codeunits de vuestra licencia y en cada licencia hay una numeración libre que puede no corresponderse entre empresas.

      Por ello hay que analizar cada caso muy a fondo para poder aventurar una respuesta.

      Si continuas interesado, podemos seguir profundizando por correo o teléfono. Mis datos personales están en el apartado de contacto.

      Un saludo.

    1. Hola, que tal, los ejemplos son capturas de pantalla de un Nav 4.01 pero dado que hay que personalizarlo para cada instalación, se puede instalar en cualquier versión de Navision de la 2.01 a la 5.0 e incluso en la 2009 siempre que se use el cliente clásico para manejarla.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


*

Su consultor TI © 2014 Frontier Theme