Perfiles Funcionales
Los perfiles funcionales constituyen el mecanismo inicial que permite regular el acceso de un usuario a una operación. Vía estos, definimos el ámbito en que se va a desenvolver un usuario, ya que ademas del acceso tambièn se incluyen las restricciones funcionales para lograr una granularidad mas fina.
Normalmente existe un perfil de usuario administrador (admin), el cual posee acceso a toda la funcionalidad de la aplicación. Dicho perfil debería estar asignado únicamente a aquel o aquellos usuarios que se encarguen de administrar el sistema, por defecto durante la instalación se crea un usuario administrador que tiene asigando este perfil y con el cual se realizarán las primeras modificaciones.
Agregando un perfil funcional
Para generar un nuevo perfil funcional, se debe navegar por el menú hacia la opción Perfiles --> Perfiles Funcionales.
Al ingresar en la operación nos encontraremos con un combo de selección que nos permitirá visualizar los perfiles funcionales para los distintos proyectos cargados. Es importante tener en cuenta que cada proyecto tiene su propio grupo de perfiles funcionales, por lo que tener posicionado correctamente el combo evita confusiones. Luego de seleccionar nuestro proyecto en el combo, la imagen debería ser similar a la siguiente:
En la imagen podemos observar que además de los típicos botones para agregar y editar un perfil, se encuentra tambien el botón Ver Esquema, dicho botón nos permite visualizar en forma gráfica la jerarquía de perfiles funcionales de la aplicación. Siempre es conveniente antes de decidir agregar un perfil, verificar que el mismo no existe. En lo posible se recomienda que el nombre del perfil sea significativo de manera de poder identificar claramente su alcance.
Presionando el botón Agregar iniciamos entonces el proceso de creación de un perfil funcional.
Datos Básicos
Lo primero que visualizamos en el cambio de pantalla, son los datos básicos del perfil. Aquí indicamos un Identificador alfanumérico y luego incluímos un Nombre que nos servirá como descripción del mismo. En caso de usar una jerarquía con membresías (luego volveremos sobre esto) se recomienda que el identificador siga un patron alfabético, para evitar inconvenientes por temporalidad durante los cambios de versiones. También se debe indicar si dicho perfil puede ser modificado en un entorno de producción o no (este check se visualiza únicamente en un entorno de desarrollo).
Por debajo de los datos básicos nos encontramos con un árbol de
operaciones (tal como fue definido en el editor) que utilizaremos para
ir creando las limitaciones de acceso a nuestra aplicación. Tal como se
ve en la imagen, existen operaciones que deben tener garantizado el
acceso siempre, son aquellas que intervienen de alguna manera en el
proceso de login/logout de la aplicación, en el caso del ejemplo se
encuenta la operación Inicio la cual implementa lo que sería el
home de la aplicación, si un usuario no tiene acceso a ella.. luego de
loguearse recibirá un error de acceso aún cuando poseea permisos de
acceso a otras operaciones.
Sobre el margen derecho podemos ver que se presentan los íconos utilizados para brindar o restringir el acceso a una operación, al clickear sobre ellos se cambia al estado complementario. Las carpetas están marcadas con un checkbox en lugar de un ícono, al clickear dicho checkbox se invierte el estado de todas las operaciones que existan dentro de ella, esto tiene como objetivo facilitar la asignación de acceso a grandes grupos de operaciones. Sin embargo, se debe tener en cuenta que por su comportamiento binario, si existía dentro de la carpeta alguna operación que ya tenía acceso, la misma ahora quedará no disponible luego de clickear el checkbox.
Restricciones Funcionales
Los perfiles funcionales conceden el acceso a una operación, sin embargo no especifican que condiciones de uso tendrá la misma. Es por ello, que cada perfil funcional puede tener asociadas una o más restricciones funcionales, de forma tal que en un solo paso no solamente se le permita el acceso a un usuario, sino que se modele la manera en la que utilizará dichas operaciones en ese contexto.
Ello se lleva a cabo en la segunda pestaña de la operación, seleccionando tantas restricciones funcionales como se quieran aplicar. Operativamente, el resultado de esta selección es la unión de las restricciones, aunque cabe destacar que en caso de conflicto de permisos dentro de una operación se tomará la primer restricción que se encuentre.
Membresías
De manera similar a como el motor de base de datos (postgres) maneja sus roles, se creo la posibilidad de armar una jerarquía de perfiles funcionales. Esto es, armar los perfiles de tal manera que se vayan especializando cada vez más y sean lo mas pequeños posibles, componiendo luego una jerarquía para que se logre el total de los permisos buscados.
En este caso, nuevamente la resultante es la unión de sus componentes.. pero priorizando el acceso, esto es, si en alguno de los "padres" la operación tiene habilitado el acceso entonces en la resultante será accesible. Se puede lograr un resultado similar, asignandole al usuario más de un perfil funcional vía el ABM de usuarios.
Si se planea hacer una definición de perfiles con uso de membresías, es importante que la jerarquía se refleje en forma alfabética en los identificadores de perfil. Esto es necesario, ya que durante las actualizaciones se procesan los perfiles funcionales individualmente para evitar que algún inconveniente en uno detenga todo el proceso de actualización, la problemática que esto conlleva es de temporalidad, si los perfiles no se procesan en el orden correcto pueden generarse errores innecesarios que obliguen a tener que redefinir el perfil que falla luego de la actualización.
Una vez determinadas todas las restricciones sobre las operaciones, debemos presionar el botón Guardar para que el perfil sea persistido contra la base de datos.
