icono_twiter icono LinkedIn icono Facebook Icono Xing
Roberto Canales Mora

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007.
Twitter:

Autor de los Libros: Planifica tu éxito: de aprendiz a empresario y Informática profesional, las reglas no escritas para triunfar en la empresa

Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2007-06-13

Tutorial visitado 6.001 veces Descargar en PDF
OpenRules

OpenRules

Llevo desde septiembre del año pasado estudiando un Executive MBA en el Instituto de Empresa y hoy, después de meses sin parar de estudiar decenas de cosas distintas alejadas de la programación, no he podido resistir la tentación de tirar código ... o eso creía.

En nuestra herramienta TNTConcept, hemos implantado un sistema de permisos (con Spring y Acegi) donde, en una primera versión hemos encapsulado la lista de accesos (ACLs) en una clase java. No nos costará mucha sacarlos a otros formatos pero, si nos remontamos a los principios, la lista de permisos la definimos en una hoja de cálculo. ¿Por qué no usar sin más esa hoja de cálculo?.

En Autentia, estamos cacharreando todo el tiempo (sino unos otros) y tratando de concentrar el conocimiento en nuestra herramienta (de la que obtendremos tanto buenas como malas conclusiones) y hoy le toca a OpenRules.

Descarga e instalación

Primero vamos al Web de la empresa http://openrules.com/. Como curiosidad, el software que use esta herramienta tiene que llevar el PowerBy.

Vemos las opciones de descarga

Vemos el fichero decomprimido

Elegimos el primer ejemplo y lo ejecutamos

Lastima .. pero necesitamos instalar ANT

Instalación de Ant

Nos vamos a su Web y lo descargamos: http://ant.apache.org/. En www.adictosaltrabajo.com hay varios tutoriales de ANT (Introducción a ANT, Desarrollo gráfico ANT , Subir el contenido de una carpeta por ftp mediante un script de Ant)

Para que funcione, tenemos que modificar las variables de entorno path y classpath

Volvemos a ejecutar el ejemplo y ya funciona ...

Interpretación del ejemplo

Analizamos un poco el ejemplo HelloRules

En un primer excel se define el comportamiento del programa como un main normal Java

En otra lengüeta tiene los datos y reglas separados (no es necesario pero parece sensato ... aunque un poco molesto a la hora de cambiar de ficehros)

Vamos a la hoja de datos donde se define la estructura de objetos: App con sus atributos (uno de ellos a su vez otro objeto: Customer).

Las tablas de más abajo sólo se utilizan como validaciones excel (hay que saber un pelín manejar la herramienta: Definir nombre, validación, agrupar, etc. aunque se coge el truco enseguida)

En la siguiente lengüeta se inicializan los datos.

En la hoja de reglas, se definen dos: La primera defineGreeting tenemos dos condiciones y una asignación y nos sirve para rellenar el campo app.greeting cuando hay una coincidencia.

Nuestro ejemplo

Usando la misma estructura y sin leer la documentación, intuitivamente se puede intentar una chapucilla.

app va a representar los datos que nos pasarían por programa: Usuario y la función que quiere ejecutar

El sistema nos dirá si podemos o no.

Primero obtenemos el rol del usuario y el permiso asignado a ese rol

Method void main(String[] args) 
Permisos app = apps[0];
calculaRol(app);
calculaPermisos(app);
app.resultado = app.nombre + ", " + app.funcion + " " + app.permiso + "!";
System.out.println("*** Estos son los permisos ***");
System.out.println(app.resultado);

Simplificamos la estructura de datos

 
BUSINESS GLOSSARY
TERM TYPE TERM NAME
   
Datatype Permisos
String nombre
String funcion
String rol
String permiso
String resultado
 
Nombres Perfiles
Roberto Administrador
Juan Usuario
Pedro Cliente
Luis Administrativo
Angel  
Gema  
 
Permisos Funciones
Listado Cuentas
Detalle Clientes
Modificación  
 

 

 

 

       
Data Permisos apps
nombre funcion rol permiso resultado
Nombre Funcion rol permiso Resultado
Roberto Clientes nulo nulo nulo
Gema Listado nulo nulo nulo
       
   
Rules void calculaRol(Permisos app)
C1   A1
app.nombre.equals(nombre);   app.rol = rol; 
String nombre   String rol
Nombre   Set rol
Roberto   Cliente
Gema   Staff
Pedro   Usuario
Carlos   Usuario
Antonio   Usuario
Juan   Admin
   
   
Rules void calculaPermisos(Permisos app)
C1 C2 A1
app.rol.equals(nombre); app.funcion.equals(funcion); app.permiso = permiso; 
String nombre String funcion String permiso
Nombre Funcion Set Permiso
Admin Clientes Autorizado
Staff Clientes Autorizado
Usuario Clientes Cliente
Cliente Clientes Denegado
   

Al ejecutar, lo hemos conseguido

Bueno, espero que se os estén ocurriendo tantos usos como a mí ... es cuestión de dedicarle unas horitas más ...

Este tipo de programación puede parecer complejo pero una vez definidas las tablas, sólo hay que añadir elementos de un modo trivial. Es una herramienta más que debería tener en mente un arquitecto de software pero no lo olvidéis ... una cosa es conocerlo y otra tratar de enchufarla, a partir de ahora, en todos lo proyectos ...

 

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL: