You are on page 1of 16

Control de Acceso a Formularios por Usuario v1.

Elaborado en: Visual FoxPro 9 SP1

Por: eduardo_a2j

email: eduardo_a2j@hotmail.com

Fecha de publicacin: Enero 2012

Licencia: CopyLeft

Usuarios y contraseas para acceder al sistema: PROPIETARIO / PROPIETARIO ADMIN / ADMIN INVITADO / INVITADO

San Salvador, El Salvador, Enero de 2012.

Control de Accesos por Usuario a Formularios v1.0

ndice o Contenido:
INTRODUCCIN. ................................................................................................................... 3 DESCRIPCIN GENERAL........................................................................................................... 4 CARACTERSTICAS DEL PROYECTO. ............................................................................................ 5 BASE DE DATOS. ................................................................................................................... 6 ACCEDIENDO AL SISTEMA........................................................................................................ 7 FUNCIONAMIENTO. ................................................................................................................ 8 EJECUTANDO EL PROYECTO.................................................................................................... 12 IMPLEMENTACIN................................................................................................................ 13 MEJORANDO EL CDIGO........................................................................................................ 15 ACLARACIONES ................................................................................................................... 16

Control de Accesos por Usuario a Formularios v1.0

Introduccin.
Uno de los muchos problemas que enfrentamos los desarrolladores y que por lo general nos solicitan nuestros clientes es controlar el acceso a los formularios o mdulos de un sistema. Es decir, que un usuario A, pueda hacer lo que un usuario B no debe de poder hacer en un mismo formulario; en otras ocasiones el usuario B no debe ver la informacin de un formulario que un usuario A s puede ver. Esto muchas veces (por no decir que es por regla general) se logra mediante cdigo, pero esto es un problema cuando el usuario A se da de baja y un usuario C lo debe sustituir. Para resolver esto generalmente se recurre a dos alternativas o soluciones: que el usuario C use el usuario del usuario A o que el desarrollador sustituya en el cdigo fuente los accesos reemplazando al usuario A por el usuario C, obligando en algunos casos a recompilar todo el sistema y esto se vuelve un problema mayor cuando la empresa no posee el cdigo fuente o cuando ya no se da soporte al sistema. Este proyecto pretende solventar todas estas deficiencias y puede ser aplicado a sistemas desarrollados en Visual FoxPro, aunque tambin puede ser adaptado a otros lenguajes, pero esto depender de la pericia del programador.

Control de Accesos por Usuario a Formularios v1.0

Descripcin general.
Este proyecto permite crear usuarios y crear grupos de usuarios, a los grupos de usuarios se le asignan roles, los cuales no son mas que los accesos o permisos que tendrn los usuarios a cada uno de los formularios del sistema; luego estos roles pueden ser asignados a los usuarios y luego ser modificados y personalizados. Todo ello, desde el mismo sistema y sin escribir, ni modificar una sola lnea de cdigo y sin volver a compilar el proyecto. Una vez asignados los accesos a un usuario, cuando este intenta cargar un formulario a travs del men del sistema una funcin evala el nivel de acceso que tiene asignado y determina si el usuario tiene permisos para consultar o ver el formulario, de lo contrario, deniega el acceso del mismo, si cuenta con los permisos para cargar el mdulo otra funcin dentro del formulario se encarga de habilitar/deshabilitar los objetos a los que puede tener acceso de acuerdo al nivel de acceso que tenga asignados. Si bien este proyecto se realiz en Visual FoxPro v9.0, considero que tambin podra funcionar en versiones anteriores desde la 7.0.

Control de Accesos por Usuario a Formularios v1.0

Caractersticas del Proyecto.


Permite agregar un nmero ilimitado de formularios al Sistema, siempre y cuando todos se encuentren dentro de la carpeta Formularios, a los cuales le genera su propio identificador nico. Permite crear y editar grupos de usuarios, as como habilitar o deshabilitar los ya existentes. Asignar roles y accesos a los grupos de usuarios. Permite crear y editar unidades o departamentos, as como habilitar o deshabilitar los ya existentes. Permite crear, editar y buscar usuarios, as como habilitar o deshabilitar los ya existentes. Permite que un usuario cambie su contrasea, siempre que el usuario no tenga definida una (este vaca) o el tiempo definido en el cual expira haya vencido. Asigna roles o accesos a los usuarios, esto puede hacerlo basado en los roles previamente definidos o bien definirlos de manera nica a cada usuario. Copiar los roles de un Usuario a otro. Permite que cada usuario pueda colocar una imagen de su eleccin como fondo en el sistema (nicamente tiene que guardar la imagen que desea de fondo en la unidad raz de C: con el nombre FondoSistema.jpg o FondoSistema.png o FondoSistema.bmp. El sistema genera su propio registro de errores (Errores.txt) para efectos de depuracin, el cual se genera y se guarda en la carpeta donde se encuentra instalado el ejecutable. Los objetos utilizan la clase Clases.vcx, la cual nicamente se ha utilizado para efectos de estandarizar la fuente, colores y no incluye cdigo fuente que afecte el funcionamiento o diseo del proyecto. La clase Edit incluye una llamada al procedimiento MenuContextual que habilita los comandos Copiar, Cortar, Pegar y Borrar del texto al hacer clic derecho en el objeto. Incluye un pequeo y sencillo procedimiento o funcin de encriptacin/desencriptacin de la contrasea del Usuario. Incluye un registro de los cambios realizados en el sistema (nuevos registros, modificaciones, eliminaciones, actualizaciones) Incluye un emulador del entorno de datos para efectos de depuracin del sistema (Cargar_entorno.prg). Incluye un mdulo donde se puede configurar el Sistema y aadirle nuevas opciones.
5

Control de Accesos por Usuario a Formularios v1.0

Incluye reportes para los formularios de mantenimiento. Tiene creados 3 usuarios de manera predeterminada con diferentes niveles de acceso, los cuales pueden ser modificados si ingresa al sistema con un usuario que tenga acceso a modificar los accesos de los otros.

Base de datos.
El proyecto cuenta con las siguientes tablas, aunque no todas son indispensables para su implementacin en un sistema ya creado: Nota: Las tablas que inician con c_ indican las tablas que son catlogo.

Control de Accesos por Usuario a Formularios v1.0

c_Usuario: Contiene los datos de los usuarios del sistema. c_Grupo: Cada usuario pertenece a un grupo de usuarios, (digitadores, secretarias, administrador, etc.). c_Unidad: Cada usuario pertenece a una unidad o departamento. c_Formulario: Esta tabla es nicamente para desarrolladores y no para administradores del sistema, ya que generalmente los ejecutables que se distribuyen no incluyen el cdigo fuente o los formularios. Contiene la lista de todos los formularios del sistema, a cada formulario se le asigna un identificador nico (id_form) con el cual es identificado. Roles_grupo_usuario: Contiene los roles definidos para un grupo de usuarios para luego asignarlos a los usuarios. Acceso_usuario: Contiene los accesos definidos para cada usuario a cada formulario del sistema, as como el nivel de acceso que este tendr a ellos, esta es la tabla que es consultada cuando un usuario intenta cargar un formulario. Bitacora: Guarda un registro de las modificaciones hechas en el sistema. Sys_config: Tabla libre que guarda la informacin de configuracin general del Sistema, la cual por supuesto, tambin cuenta con su propio mdulo de mantenimiento. Para ver el diccionario de datos, vea el Anexo I.

Accediendo al Sistema.
Acceda al sistema con el siguiente usuario y contrasea: PROPIETARIO, este le permitir tener acceso sin restricciones a todos los mdulos o formularios del sistema. Usuario recomendado nicamente para desarrolladores, ya que permite configurar todo el entorno del sistema. Evite reducir los accesos a este usuario u olvidar la contrasea (si la cambia
7

Control de Accesos por Usuario a Formularios v1.0

posteriormente) a menos que haya creado otro usuario con acceso total al sistema, ya que de lo contrario podra deshabilitar permanentemente algunos mdulos y no podr restablecerlos si redujo el nivel de acceso a este usuario o si lo deshabilit. Tambin puede acceder con el usuario y contrasea: ADMIN, pero algunas funciones estarn restringidas. Usuario recomendando para los administradores del sistema. Las funciones de configuracin del sistema estn deshabilitadas para este usuario. Ya que una vez instalado el sistema, los administradores no deberan cambiar esas opciones. Tambin se incluye un usuario de consulta, con el usuario y contrasea INVITADO.

Funcionamiento.
Cada formulario del proyecto al cual se le controla el nivel de acceso por usuario est contenido en un Conjunto de Formularios (Formset) y se le han agregado dos propiedades: id_Form y Acceso, ambas de tipo numrico e inicializadas con el valor de 0 (cero) en la ventana de propiedades. A continuacin, se explica la funcin de cada una de ellas: Id_form: Guarda el id asignado al formulario en el mantenimiento de formularios. Acceso: Contiene un valor numrico que determina el nivel de acceso que tiene asignado el usuario al formulario, (no confundir con el campo acceso). El campo acceso, contiene los permisos bsicos al formulario, los campos lgicos impresin y

eliminar contienen los permisos para imprimir reportes o eliminar registros respectivamente.
Para evitar pasar estos 3 parmetros al formulario, se utiliza la propiedad Acceso, la cual va sumando valores de acuerdo a estos 3 campos, el nmero que suma determina los permisos que tiene el usuario de acuerdo a la siguiente tabla:

Control de Accesos por Usuario a Formularios v1.0


-----------------------------------------------------------| Restringido | | | | | | | 32 33 34 35 -----------------------------------------------------------22 23 24 25 12 13 14 15 0 1 Consulta 2 Adicin 3 Modificacin 4 Acceso Total | 5 | Campo Acceso | | Solo Impresin (+10) | | Solo Eliminar registros (+20) | | Impresin y eliminacin de regs. |------------------------------------------------------------|

As, el valor de la propiedad Acceso puede tomar cualquiera de esos valores, cuyo significado es interpretado en el formulario as: 0 1 = RESTRINGIDO, el usuario no tiene acceso a cargar ni ver el formulario. 2 = CONSULTA, puede cargar y ver el formulario, pero no puede hacer modificaciones a los registros, ni tampoco puede generar Reportes, ni Eliminar registros. 3 = ADICIN, puede crear registros o hacer adiciones, pero no puede hacer modificaciones a los registros, ni tampoco puede generar Reportes, ni Eliminar registros. 4 5 = MODIFICACION, puede crear/modificar los registros del formulario. Pero no puede = ACCESO TOTAL, tiene acceso total a los datos del formulario, Pero sigue sin poder generar Reportes, ni Eliminar registros. generar Reportes, ni Eliminar registros. 12 = CONSULTA+IMPRESION, el usuario puede cargar y ver el formulario, pero no puede hacer modificaciones a los registros, puede generar Reportes, pero no Eliminar registros. 13 = ADICIN+IMPRESION, puede crear registros o hacer adiciones, pero no modificar los registros ya existentes, puede generar Reportes, pero no Eliminar registros. 14 = MODIFICACION+IMPRESION, puede crear/modificar los registros del formulario y puede generar reportes. Pero no puede Eliminar registros. 15 = ACCESO TOTAL+IMPRESION, tiene acceso total a los datos del formulario, y puede generar reportes, pero no puede Eliminar registros.

Control de Accesos por Usuario a Formularios v1.0

22 = CONSULTA+ELIMINAR, el usuario puede cargar y ver el formulario, pero no puede hacer modificaciones a los registros, ni tampoco puede generar Reportes, pero s puede Eliminar registros. 23 = ADICIN+ELIMINAR, puede crear registros o hacer adiciones, pero no puede hacer modificaciones a los registros, ni tampoco puede generar Reportes, pero s puede Eliminar registros. 24 = MODIFICACION+ELIMINAR, puede crear/modificar los registros del formulario. Pero no puede generar Reportes, pero s puede Eliminar registros. 25 = ACCESO TOTAL+ELIMINAR, tiene acceso total a los datos del formulario, Pero sigue sin poder generar Reportes, pero s puede Eliminar registros. 32 = CONSULTA+IMPRESION+ELIMINAR, el usuario puede cargar y ver el formulario, pero no puede hacer modificaciones a los registros, puede generar Reportes, y tambin Eliminar registros. 33 = ADICIN+IMPRESION+ELIMINAR, puede crear registros o hacer adiciones, pero no modificar los registros ya existentes, puede generar Reportes, y tambin Eliminar registros. 34 = MODIFICACION+IMPRESION+ELIMINAR, puede crear/modificar los registros del formulario y puede generar reportes, as como tambin Eliminar registros. 35 = ACCESO TOTAL+IMPRESION+ELIMINAR, tiene acceso total a los datos del formulario, y puede generar reportes, y tambin Eliminar registros. El valor de 'Acceso' es evaluado en el procedimiento Init del FORMSET del formulario. Los formularios deben ser llamados a travs de la funcin CargarFormulario as: DO CargarFormulario WITH ## Donde ## es id_form asignado al formulario. Este nmero es asignado automticamente en el mantenimiento de Formularios (Sistema -> Formularios del sistema).

10

Control de Accesos por Usuario a Formularios v1.0

Utilice el botn Actualizar a medida vaya agregando ms formularios. Si el botn actualizar (u otros) no estn visibles, acceda como PROPIETARIO al sistema. La ubicacin de la carpeta de los formularios debe estar dentro de la carpeta Formularios donde est instalado el sistema, vea el mdulo de Configuracin del Sistema. Tenga en cuenta que si un formulario que ya haba sido agregado es renombrado, se le generar un nuevo id y el anterior ser marcado en rojo indicando que este ya no existe. Para conservar el id de un formulario renombrado, actualice el campo Formulario con el nuevo nombre antes de presionar el botn Actualizar. La columna Habilitado indica si el formulario aparece al momento de asignar los roles a los usuarios.

11

Control de Accesos por Usuario a Formularios v1.0

INICIO Usuario ingresa al Sistema. Usuario selecciona una opcin del Men del Sistema. Se llama a la funcin CargarFormulario y se le pasa como parmetro el id del formulario (id_form) que se intenta cargar.
Se valida el usuario, contrasea y se carga el men del Sistema.

Este id_form es asignado en el mantenimiento de formularios.

No

Tiene acceso el usuario para ver/cargar el formulario?

Determina el nivel de acceso del usuario al mdulo. Muestra mensaje al usuario Indicandole que debe solicitar acceso al mdulo.

Carga el formulario solicitado pasndole como parmetros el id_form y el nivel de acceso del usuario.
Estos datos se guardan en las propiedades id_form y Acceso del Formulario o del Conjunto de Formularios para que puedan ser consultados en cualquier momento mientras el formulario est siendo ejecutado.

Los objetos deben estar deshabilitados y la propiedad VISIBLE establecida a FALSO para los objetos que permiten la manipulacin de la informacin en el formulario.

En el procedimiento Init del formulario se habilitan o se muestran los objetos que permiten la modificacin/ impresin de los datos.

FIN

Ejecutando el proyecto.
Una vez abierto el proyecto desde VFP nos vamos a la pestaa Cdigo y modificamos el programa cargar_entorno, buscamos la lnea que dice:
CD 'F:\Control de Accesos x Usuario'

12

Control de Accesos por Usuario a Formularios v1.0

Y la cambiamos colocando la unidad y la ruta completa donde est ubicado nuestro proyecto y lo guardamos. Esta modificacin la haremos una tan sola vez o si cambiamos de ubicacin nuestro proyecto. Finalmente, ejecutamos el programa cargar_entorno para que se emule el entorno de datos permitiendo que se puedan ejecutar los formularios sin que d error al localizar archivos o variables globales que s existen cuando se carga el ejecutable del sistema. Nota: Si ejecuta un formulario desde el proyecto o desde la ventana de comandos, y no con la funcin CargarFormulario, este se ejecutar con los permisos mnimos para el usuario, (solo consulta) por lo que algunos botones no estarn visibles.

Implementacin.
Si ya tienes un sistema o quieres implementar este mtodo de control de formularios por usuario, debes hacer algunas modificaciones, o si crears uno a partir de este debes tener en consideracin algunas cuestiones bsicas que sern necesarias: 1- Asegrate de que tu formulario sea completamente funcional, utiliza botones para habilitar/deshabilitar las modificaciones y la edicin de los datos. 2- Es recomendable que todos tus formularios estn contenidos en un Conjunto de formularios (o Formset), para ello, debes abrirlos y seleccionar Formulario -> Crear conjunto de formularios. Si bien esto no es obligatorio, se recomienda hacerlo, ya que el cdigo que se agregar a cada formulario (ver siguiente numeral) considera que el formulario est contenido en un Conjunto de formularios. Sino, ten en consideracin esto al momento de darle nombre a los objetos que especificars en el paso 4. 3- En la pestaa Codigo de este proyecto, est el procedimiento llamado _copie este codigo en el Init de su conjunto de formularios.prg bralo, seleccione y copie todo el cdigo y pguelo en el procedimiento INIT del conjunto de formularios (vea el paso 2) donde lo implementar.
13

Control de Accesos por Usuario a Formularios v1.0

4- Una vez haya pegado el cdigo, y antes de cerrar el formulario, sustituya en el cdigo que peg la lnea que contiene "NOMBREDEMIFORMULARIO" por la propiedad "Name" del formulario principal donde estn los objetos que permiten la modificacin de los datos del formulario. As mismo, agregue tambin las lneas de cdigo para los objetos que permiten la manipulacin de los datos y establezca la propiedad VISIBLE a .T. (Verdadero) segn donde corresponda y de acuerdo al nivel de acceso. 5- Coloque la propiedad VISIBLE a .F. (Falso) en la ventana de propiedades a los objetos definidos en el paso 4 para que estos estn ocultos de manera predeterminada y sean habilitados de acuerdo al nivel de acceso que tiene cada usuario. 6- Cree las propiedades id_form y Acceso, en el conjunto de formularios e inicialcelas a cero (0) en la ventana de propiedades. 7- Es recomendable utilizar los formularios o conjunto de formularios con la propiedad

WindowType establecida a 1-Modal, recuerde que si el formulario est contenido en


un conjunto de formularios, esta propiedad debe definirla en el Formset. 8- Genere el id_form del formulario que acaba de modificar, ingrese al sistema como PROPIETARIO o con un usuario con acceso total al sistema y vaya al men Sistema ->

Formularios del Sistema y actualice la lista de formularios (recuerde colocar sus


formularios en la ubicacin que se indica en la parte superior del formulario). Anote o recuerde el id_form asignado. Recuerde que tambin puede generar un informe para imprimir la lista de formularios y tenerlo a la mano. 9- Para llamar al formulario (desde un men, desde otro formulario o desde la ventana de comandos) ya sea para realizar pruebas o ejecutarlo, hgalo as: DO CargarFormulario WITH ## Y en ## coloque el id_form que se le asign al formulario en el paso 6.

14

Control de Accesos por Usuario a Formularios v1.0

10- Recuerde asignar los roles a los grupos de usuarios y luego asignarlos o actualizar los accesos a cada usuario cuando haya terminado, Para esto vaya al men Mantenimiento. 11- Recomiendo revisar el formulario de mantenimiento de Usuarios, ya que contiene la mayora de las funciones para un formulario, adems de incluir la propiedad Modo que funciona como bandera para indicar el modo en que se encuentra el formulario: Modo 0 1 2 Significado Modo Consulta: Al cargar el formulario es el valor predeterminado, todos los objetos estn en modo de Solo lectura y no pueden ser modificados. Nuevo: Los objetos estn habilitados e inicializados para crear un nuevo registro. Modo Edicin: Los objetos estn habilitados para modificar un registro ya existente. La propiedad Modo es evaluada en la funcin HabilitarDeshabilitarObjetos, la cual es llamada cuando el usuario intenta crear/modificar/guardar un registro. Dependiendo del valor que tenga Habilita o deshabilita los objetos del formulario. Es recomendable seguir o crear una nomenclatura para nombrar los formularios, por ejemplo, los formularios de carga del sistema inician con el nmero 00-, los de mantenimiento iniciaran con los nmeros 01-20, los formularios de configuracin y registro de bitcora los nmeros 95-99 y nombrar los reportes con el mismo nmero para una fcil identificacin de a cul formulario pertenecen.

Mejorando el cdigo.
Si bien este proyecto permite varias combinaciones de accesos (0-1 = Restringido;

2=

Consulta; 3= Adicin; 4=Modificacin; 5 = Acceso Total), es posible cambiar esta nomenclatura


creando una tabla un relacionndola con estos u otros nmeros y cambiando su significado, pero creo que los actuales, ms las combinaciones de Eliminacin y Reportes son ms que suficientes por el momento para tener un buen control de accesos en un sistema pequeo o mediano.
15

Control de Accesos por Usuario a Formularios v1.0

Incorporar la fotografa del usuario en los reportes. Me hubiese gustado que las opciones de men aparecieran habilitadas/deshabilitas (u ocultas) de manera predeterminada segn el nivel de acceso que tenga el usuario, pero eso est ms all del objetivo de este proyecto. Dado que al modificar los roles o accesos de los grupos, los usuarios que pertenecen a ese grupo no se ven afectados, en un sistema con muchos usuarios quiz valga la pena agregar la opcin para que los cambios en los roles s afecten a los usuarios que pertenezcan a ese grupo.

Aclaraciones
El proyecto no est libre de errores, pero he tratado de reducirlos o minimizar su impacto. Sin embargo, no me responsabilizo por el dao que pueda ocasionar, salo bajo tu propia responsabilidad. Este proyecto sirve nicamente para propsitos de mostrar el funcionamiento y mtodo de asignacin de roles o accesos a los usuarios para los formularios, por lo que el proyecto en s no incluye otros formularios ya que no es un sistema completo en s, eso est fuera del alcance del mismo. Eres libre de copiar este proyecto, distribuirlo, modificarlo, mejorarlo, implementarlo, bajo la condicin de que el producto que obtengas de l lo liberes con la misma licencia. Tampoco puedes lucrarte de el, recibiste de gratis, dalo de gratis, pues as todos nos vemos beneficiados. Por favor, no me escribas para pedirme que haga el trabajo por ti, para eso escrib esta documentacin, si algo no te qued claro, vuelve a leerla, analiza bien el cdigo fuente y familiarzate con este proyecto y este documento antes de hacer cualquier modificacin en tu proyecto, entonces intenta hacerlo primero por ti mismo, si an as algo no ha quedado muy claro, entonces pregunta, y con gusto ver si puedo ayudarte. Buena Suerte!
16