¿Cómo crear un proceso para registro de usuarios?

1
0
-1

Buen día. Soy tesista en la Universidad Central de Venezuela y estoy desarrollando un sistema de gestión de pasantias para mi escuela (Escuela de Computación de la Facultad de Ciencias). Ahora bien, he estado investigando durante varias semanas sobre Bonita BPM ya que mi propuesta de solución se basa en la utilización de esta herramienta. Como estoy empezando el desarrollo de dicho sistema, estoy comenzando por realizar el siguiente proceso:

  • Una empresa/organización se registra en el sistema mediante un formulario
  • Los datos del registro son evaluados por un administrador que valida si es una empresa legal o no
  • Si la empresa es legal, puede hacer login en el sistema para publicar ofertas de pasantias para los estudiantes

Bien, los dos primeros puntos los he logrado abarcar luego de estudiar la documentación oficial, sin embargo, necesito asesoría con el tercer punto, puesto que no se como debo realizar el proceso de login de manera correcta, es decir, que la empresa con el usuario y contraseña especificados en el formulario pueda ingresar al sistema posteriormente. Cabe destacar que para la solución de los dos primeros puntos, he definido un Objeto de Negocio llamado "Empresa", el cual posee los distintos atributos que necesito conocer de la empresa (nombre, dirección, telefono, usuario, contraseña, etc), igualmente he definido una organización con Grupos, Roles y Usuarios.

Comments

Submitted by choripanada on Tue, 01/26/2016 - 20:24

Hola, tengo un problema similar. Como hiciste la primera parte para el registro de las empresas?

Lo que quiero lograr es que todo el proceso de registro sea gestionado por bonita, pero para que el proceso pueda ser instanciado hay que iniciar sesión en el portal. El problema que tengo con esto es ¿cómo voy a iniciar sesión si no estoy registrado?

Precisamente, porque luego del registro, alguien debe validar los datos de la empresa y otra documentación para que una vez validado el usuario se active y pueda hacer login en el sistema.

Submitted by isaacehm on Tue, 01/26/2016 - 20:50

Hola. Bueno, para la ejecución del proceso que nombre: Registro de empresa, dentro de la organización que cree desde el menú Organización > Administrar..., definí un usuario llamado "Invitado" con su respectiva contraseña, dicho usuario es el que ejecutara el proceso de Registro de empresa. Así mismo, entre los actores que definí para la Pool, agregue uno llamado "Invitado" y desde el botón Configurar > Mapeo de actores ubicado en el coolbar, especifique para dicho actor el rol Invitado que te mencione anteriormente.

Por otro lado, dentro de la empresa también definí un usuario "Administrador", el cual al momento de crear el usuario "Invitado" coloque en el campo "Responsable" a dicho "Administrador", de modo que cuando el "Invitado" inicie el proceso y envié el formulario de registro, el "Administrador" lo recibe en la lista de tareas por revisar/hacer. Te recomiendo que primero definas la estructura de la organización que quieres representar, es decir, la organización, sus departamentos o grupos, los cargos o roles que coexisten y los usuarios iniciales.

Saludos.

Submitted by choripanada on Tue, 01/26/2016 - 21:01

Vale, gracias por la pronta respuesta, pensaba hacer una aproximación similar (también leí algo por la Q&A de un usuario anónimo, aunque no me queda del todo claro), el inconveniente que tengo con esto es que ese usuario invitado tiene acceso a todo el portal de Bonita. ¿Como restringes o evitas que solamente pueda ejecutar la tarea de registro y que no pueda acceder a otras partes del portal (o por vía API, URL, etc.)?

Ahora lo que tengo definido es una LivingApp a modo de prueba con un Home y un link a mi proceso de registro, con la organización y actores por defecto. El problema con el que me topé es que si modifico la vista de Login al Bonita Portal para tener un inicio de sesión al sistema (Una App) y un link al proceso de registro (Otra App), no se instancia ninguna tarea en el motor de Bonita hasta no haber un usuario con sesión iniciada (por ejem. walter.bates) y por lo tanto no puedo continuar.

Seguiré haciendo pruebas con un usuario "invitado", pero debería haber una solución más elegante :P (no se si sea así en la versión de suscripción...)

Saludos.

Submitted by isaacehm on Tue, 01/26/2016 - 21:37

Si, es verdad, ese usuario Invitado percibe permisos de administración. En ese caso te podría servir mas el usuario anónimo aunque yo tampoco he logrado entenderlo del todo. Particularmente, no me afecta del todo tener ese "Invitado" puesto que solo lo uso para iniciar el proceso de registro, mientras que estoy haciendo un login personalizado mediante el UI Designer (sin implicar ningún proceso) para evitar el uso del Bonita Portal e independizar lo mas posible la app que estoy desarrollando, para esto me valgo del loginservice del API (http://documentation.bonitasoft.com/rest-api-overview-0). Y dicho loginservice me ha permitido poder crear instanciaciones de procesos (../API/bpm/process?p=0&c=1&f=name=nombre del proceso).

Espero sirvan de algo los comentarios, yo también estoy aprendiendo aun esta herramienta y voy poco a poco, seguro hay cosas que no estoy desarrollando del todo bien.
Saludos.

1 answer

1
+1
-1
This one is the BEST answer!

El engine API de Bonita te serviría mucho, sería bueno que leyeras dicha documentación:
http://documentation.bonitasoft.com/manage-users

En tu caso podrías crear un connector de tipo script y haciendo uso del engine API podrías registrar un nuevo usuario a la organización de bonita basado en los datos de tu formulario.

Saludos

Comments

Submitted by isaacehm on Mon, 01/18/2016 - 19:43

Muchísimas gracias, logre comprender y avanzar un poco mas. Ya pude crear el usuario como me dijiste, ahora estoy tratando de añadirlo a un perfil, pero algo extraño ocurre con esa parte del código. Saludos.

Submitted by eduardo.cortez_1 on Tue, 01/19/2016 - 21:22

`/*
GENERAR USUARIO BONITA
*/

    UserCreator creator = new UserCreator(usuario, password);
    creator.setFirstName(unidadVar.getNombreUnidad()).setLastName("");

    ContactDataCreator proContactDataCreator = new ContactDataCreator().setAddress("").setCity("").setPhoneNumber(unidadVar.getTelefonoUnidad());
    creator.setProfessionalContactData(proContactDataCreator);
    final User user = apiAccessor.identityAPI.createUser(creator);


    org.bonitasoft.engine.api.ProfileAPI orgProfileAPI = apiAccessor.getProfileAPI();
    SearchOptionsBuilder searchOptionsBuilder = new SearchOptionsBuilder(0,10);
    searchOptionsBuilder.filter(ProfileSearchDescriptor.NAME, "user");
    SearchResult<Profile> searchResultProfile = orgProfileAPI.searchProfiles(searchOptionsBuilder.done());

    // we should find one result now
    if (searchResultProfile.getResult().size()!=1)
            { return null; }

    // now register the user in the profile
    Profile profile = searchResultProfile.getResult().get(0);
    ProfileMemberCreator profileMemberCreator = new ProfileMemberCreator( profile.getId());
    profileMemberCreator.setUserId( user.getId());
    orgProfileAPI.createProfileMember(profileMemberCreator);


    org.bonitasoft.engine.api.ProfileAPI orgProfileAPIAdmin = apiAccessor.getProfileAPI();
    SearchOptionsBuilder searchOptionsBuilderAdmin = new SearchOptionsBuilder(0,10);
    searchOptionsBuilderAdmin.filter(ProfileSearchDescriptor.NAME, "administrator");
    SearchResult<Profile> searchResultProfileAdmin = orgProfileAPIAdmin.searchProfiles(searchOptionsBuilderAdmin.done());

    // we should find one result now
    if (searchResultProfileAdmin.getResult().size()!=1)
            { return -1; }

    // now register the user in the profile
    Profile profileAdmin = searchResultProfileAdmin.getResult().get(0);
    ProfileMemberCreator profileMemberAdminCreator = new ProfileMemberCreator( profileAdmin.getId());
    profileMemberAdminCreator.setUserId( user.getId());
    orgProfileAPIAdmin.createProfileMember(profileMemberAdminCreator);

    long idGroup = Long.parseLong(grupo);
    long idRol = Long.parseLong(rol);
    try{
        UserMembership memberShip = apiAccessor.getIdentityAPI().addUserMembership(user.getId(),idGroup,idRol);
    }catch(Exception e){

    }`

Yo utilizo este script para crear el usuario de acuerdo al perfil de usuario y administrador, tambien agrego la membrecia al usuario con parametros "grupo" y "rol".

Cualquier consulta puedes contactarme a : eduardo.cortez@bird.com.sv, ofrecemos consultorias.

Submitted by isaacehm on Tue, 01/19/2016 - 21:39

Excelente, muchas gracias, Eduardo. Hice algunas comparaciones con mi código, modifique algunas lineas y logre el objetivo. Saludos.

Notifications