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 …