Controlando el acceso a los datos

Cuando se hacen aplicaciones para empresas, es normal que se requiera controlar los permisos de acceso al programa dependiendo del departamento. En este artículo os voy a explicar como lo hemos solucionado.

La aplicación está pensada para poder ser heredada y aplicarla a aplicaciones de cualquier fin, pudiendo incluso ser usada simultáneamente por más de una aplicación.

Distingo dos niveles de acceso:

  1. Acceso a menús
  2. nivel de autorización para crear/modificar datos

El control de accesos lo vamos a hacer a nivel de grupos de usuario, aprovechando la tabla que existe en vBase

Por lo que he creado cuatro tablas:

Acciones. En ella se dan de alta las acciones de menú que vamos a permitir activar o bloquear.

Tablas. Donde creamos las tablas que tendrán control de acceso a la información

Grupos – tablas. Donde definiremos los permisos de cada grupo de usuario con las tablas

Grupos – acciones. Para dar o quitar el acceso a las acciones por grupo.

Este es el esquema:

A nivel de acciones de menú no hay mas que dos posibilidades, o se permite o no se permite. Sin embargo en las tablas la cosa se puede complicar mucho (todo lo que queramos), desde controlar alta-modificación-baja, hasta controlar el acceso a cada campo (ver/modificar).

Sigue leyendo

Anuncios

vBase. Personalizando entidades

Al diseñar vBase nuestro objetivo era abstraer su contenido del uso que se pueda hacer desde otro proyecto. Por eso nuestra prioridad ha sido que en la tabla Entidades (ENT) no fuese necesario tener ningún dato dependiente de como interactuamos con ella a través de contabilidad, gestión, etc…
Para ello hemos creado una tabla de uso del programador “Tipo de entidad” (ENT_TIP) , donde cada proyecto podrá crear los tipos que necesite y la hemos relacionado con las entidades a través de la tabla “Entidad – Tipos de entidad” ( ENT_ENT_TIP).

Para manejar estas tablas, tenemos 4 funciones:

ENT_TIP_RSV_ALT.- Esta función nos crea un tipo de entidad, de uso reservado (El usuario no la podrá eliminar, ni modificar su código). La usaremos al inicializar nuestras aplicaciones.

fun:ENT_TIP_RSV_ALT@Entidades.dat(~CLT_TIP@vConta.dat, “Cliente “, 1)

ENT_ENT_TIP. Nos permite crear o verificar si existe una relación entre una entidad y un tipo de entidad. Nos retorna el ID de la tabla ENT_ENT_TIP.

fun:ENT_ENT_TIP@Entidades.dat(#ENT_CLT, ~CLT_TIP@vConta.dat, “N”, $EMP_ID_ENT@Entidades.dat)

ENT_ALT.- Un asistente para crear una entidad pasándole el tipo que queramos, nos retorna el ID de la entidad (tabla ENT), y se asegura que es del tipo pedido.

fun:ENT_ALT@vBase.app(~CLT_TIP@vConta.dat, $EMP_ID_ENT@Entidades.dat)

ENT_LOC.-  Un localizador de entidades, al cual le pasamos el tipo de entidad  (cliente, proveedor,..) y nos permite localizar por trozos, palabras… solo dentro de las entidades de tipo especificado.

fun:ENT_LOC@vBase.app( $EMP_ID_ENT@Entidades.dat , TIP_ENT, “”, “” )

Tipos de entidad

En esta tabla tenemos dos campos muy importantes:

Reservado: Cuando desde un proyecto creamos un tipo de entidad que necesitemos, como por ejemplo “alumno”, debemos marcarlo como “reservado”, de esta forma el usuario podrá ver y utilizar este tipo, pero no lo podrá modificar ni borrar (Al crear el tipo desde la función ENT_TIP_RSV_ALT ya se marca como tal). De esta forma, también permitimos al usuario de la aplicación crear sus propios tipos de entidad (estos no tendrán nunca la marca de reservado)

Multi empresa: Cuando indicamos que este tipo es multiempresa, le estamos indicando que el usuario cuando tenga más de una empresa, podrá definir una entidad como cliente para una empresa, sin que eso suponga que también estará como cliente para el resto.

Un ejemplo lo tenemos  en la vConta, desde donde creamos los tipos:

Id Nombre Multi Empresa Reservado
CLT Cliente Si Si
PRV Proveedor Si Si

Tipificando entidades

Una vez creados los tipos de entidad, el usuario podrá, desde la ficha de la entidad, definir que entidades son sus clientes y cuales sus proveedores (pudiendo, lógicamente, ser ambas cosas a la vez). Esto se realiza mediante la tabla ENT_ENT_TIP (Entidad – Tipos de entidad)

Localizando una entidad del tipo deseado

Cuando desde la contabilidad queremos buscar, por ejemplo un cliente, utilizamos la función ENT_LOC, que nos mostrará el siguiente localizador

A esta función se le pasa la empresa con la que estamos trabajando (necesaria para los tipos de entidad por empresa), y hasta 3 tipos de entidad (para permitirnos buscar, por ejemplo, clientes o preclientes)

Creando entidades desde otros proyectos

Para crear entidades desde otros proyectos disponemos de dos funciones que explicamos a continuación

ENT_ALT. Alta de entidad

Esta función nos realiza todo el proceso de creación de una entidad, mediante un asistente. Pero tiene 2 parámetros importantes:

–      TIP_ENT. Tipo de entidad: En el primer parámetro podemos pasarle el tipo de entidad que estamos creando (por ejemplo “CLT”, cliente), si queremos crear una entidad genérica pasaremos “”

–      EMP_ID. ID de la empresa: En el segundo parámetro indicamos con que empresa estamos trabajando.

La función nos retorna el ID de la entidad.

Dentro de la función se realiza el alta de la entidad, dirección y teléfonos de contactos, y al final se asegura que quede definida como cliente.

ENT_ENT_TIP. Verificar o crear relación entre entidad y tipo de entidad

A esta función le tenemos que pasar:

–      ID de la entidad

–      El tipo de entidad

–      La acción a realizar:

–      N. Nuevo: Nos crea el enlace, solo si no existe

–      V. Verificar: Retorna 0 si no existe

–      B. Borrar: Borra el enlace ente la entidad y el tipo

–      La empresa con la que trabajamos

La función nos retorna el ID de la tabla ENT_ENT_TIP.

Con esta función somos nosotros los que desde nuestra aplicación nos aseguramos que se establece el enlace, pudiendo además crear tablas con los datos específicos (formas de pago, tarifas,…) asociadas a la relación. Esto es importante si queremos utilizar campos de edición de clientes, donde podamos escribir el nombre, buscándonos únicamente en las entidades cliente.

vBase. Entidades y categorías

Vamos a ver como  crear clientes, proveedores con la vBase actual.

La tabla de entidades es genérica, y cuando queremos explotarla desde otra aplicación, como pueda ser la contabilidad o gestión, para usos concretos como definir un cliente o un proveedor, se debe usar la tabla categorías y la que las relaciona ENT_CAT.

Lo primero que tenemos que hacer es crear las categorías de uso reservado que necesitemos, la forma escogida es creando una constante que la defina. Ejemplos:

~CLT_CAT@vConta.dat con el valor CLT para definir clientes

~ENT_AGT@Gestión Maestros.dat  con el valor AGT para definir agentes comerciales

A continuación creamos un proceso que ejecutemos al inicar la aplicación para dar de alta las categorías en la tabla CAT

– Ejemplo de proceso

Suponemos que en nuestra aplicación vamos a definir comerciales, para ello definiremos una constante ENT_AGT, con el valor AGT, y creamos un registro en la tabla de categorías tal que así:

Es importante crearla como de uso reservado (USO_RSV = 1 ), para que el usuario no pueda borrarla. Ahora el usuario podrá definir cualquier entidad como comercial, con solo añadir esta categoría a las de la entidad ( tabla ENT_CAT).

Sigue leyendo

Jornadas análisis vConta

Hoy termina la semana de trabajo con Velneo, en la que estamos trabajando intensamente junto a Víctor García (Guida 21), Héctor Santoveña (HSM Software) y Jorge Velasco (The Seed Software Company), analizando y normalizando las futuras Open Apps de vBase y vConta.
La semana nos ha pasado muy rápidamente, personalmente ha sido una experiencia muy gratificante.
Nos va a dar mucha pena que finalice.
A lo largo de la semana hemos tenido momentos de acalorado debate que siempre han terminado con un resultado enriquecedor para todos. El poder contrastar la visión con el resto del equipo, el hecho que el objetivo común siempre ha sido claro por todos, hacer una vBase y vConta los más ambiciosa posible, la gran experiencia que cada uno aporta (propia y la de la lucha diaria con sus clientes) a conseguido que todos aprendamos y estoy seguro que lo que salga de aquí será una base muy sólida para la comunidad.

Os dejo un enlace al resumen de ayer, suscribo todos los comentarios de Jesus Arboleya, y esperamos repetir la experiencia. Aunque sabemos que este proyecto solo acaba de empezar.
Resumen del cuarto día de trabajo

Bueno os dejo que me voy a la última jornada, solo reiterar que está siendo un placer participar en esta experiencia.

Hojas de estilo v7 (gdCSS)

Dentro de la v7 podemos utilizar hojas de estilo CSS, para configurar el aspecto de nuestras aplicaciones. Al igual que en la web 2.0 se separa el contenido y el diseño, estando este último en los ficheros .CSS. Entonces lo ideal es que nuestros desarrollos en v7 utilicen esta técnica, de forma que unos nos dediquemos al diseño de los datos y otros al de la estética.

Dado que yo soy de los que diseñan como organizar datos y no soy bueno en definir la estética, he decidido crear una aplicación que permita a los diseñadores experimentar como afectan los distintos estilos a los objetos de una aplicación en v7. De esta forma los diseñadores podrán ir creando trozos de código CSS reutilizable, viendo su resultado y configurando distintas hojas de estilo a utilizar por los usuarios, a modo de plantillas.

Para esto he creado un proyecto de datos, con la siguiente estructura:

Sigue leyendo

Módulos básicos

Con la experiencia adquirida hasta el momento, y con las nuevas funcionalidades de la 7.2, hemos organizado una serie de soluciones, que serán a partir de las que se crearán el resto.

Datos comunes

Consideramos que toda aplicación debe tener una gestión de usuarios, y sin embargo no tiene por que tener una gestión de entidades / contactos. Por lo tanto hemos decidido separar en una solución diferente la gestión de usuarios.

En esta solución incorporamos las variables globales que utilizamos habitualmente. Proyectos:

  • Datos comunes. Proyecto de datos, con las tablas de usuarios / grupos de usuarios, y las variables de uso general
  • Recursos. Proyecto de aplicación, donde tendremos el mantenimiento de las tablas de usuarios, y los recursos/utilidades generales (Iconografía, funciones standard,….)

Hojas de estilo

Ya que actualmente podemos separar totalmente el código del aspecto visual de la aplicación, y permitir que cada usuario tenga personalizado su estilo visual (gracias al comando set hoja de estilo), hemos creado una aplicación específica para diseñar hojas de estilo.

Esta aplicación consta de:

  • Hojas de estilo.Dat. Proyecto de datos, donde estarán los estilos creados, y que podrá ser heredado por cualquier solución. Dispone de una función a la que se le pasa como parametro el código de la hoja de estilo a utilizar, y te lo devuelve. Si se pasa un cero, devuelve la última que a utilizado el usuario desde el ordenador en el que está.
  • Hojas de estilo. Proyecto de aplicación, desde donde el diseñador creará las distintas hojas de estilo. Este proyecto no será heredado por ningún otro.

Sigue leyendo