Cristian_Marambio_Tarea3.docx (1).docx

Integración de un sistema de información con la base de datos Alexis Jiménez Vejar Taller de Integración de Software Ins

Views 22 Downloads 2 File size 309KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Integración de un sistema de información con la base de datos Alexis Jiménez Vejar Taller de Integración de Software Instituto IACC 06-09-2020

Desarrollo De acuerdo con el sistema prototipo desarrollado realizar la integración de los respectivos ítems, evidenciando los siguientes ítems: 1. Realiza la implementación a nivel de programación políticas de seguridad al sistema de información por medio de un módulo de gestión de seguridad. 2. Realizar la bitácora de usuarios y la almacena en la base de datos realiza pruebas de la operatividad de los datos validados en la base de datos. 3. Programa el módulo de ayuda del sistema con los manuales de sistema y de usuario

Nota: Toda la información antes descrita debe estar evidenciada mediante capture de imágenes y documentado con una explicación previa propia de su autoría. 1. Para el ingreso a la plataforma utilizaremos un login. Con esto cada usuario contara con una cuenta de acceso y los permisos correspondientes para acceder al sistema. Para estas políticas, en nuestra base de datos contaremos con 3 tablas; users, roles y permissions.

Ilustración 1, tabla usuarios

Ilustración 2, tabla roles.

Ilustración 3, tabla permisos.

Dentro de la configuración de la app, son varios los archivos que intervienen en el manejo de las sesiones y el login. Cabe destacar que este framework cuenta con el login de usuarios nativo el cual se configura al descargarse la aplicación.

En el archivo .env que es el principal archivo de configuración encontraremos el tiempo limite de duración de una sesión. SESSION_DRIVER=file SESSION_LIFETIME=120 SESSION_LIFETIME=120, esta configuración es por defecto, pero se puede modificar según las necesidades de la aplicación. El archivo ubicado en config/session.php se encarga de definir otros parámetros dentro de la aplicación. En nuestra vista de login encontramos el formulario correspondiente al login

{{ csrf_field() }} {{-- Email field --}}





@if($errors->has('email'))

{{ $errors->first('email') }}

@endif

{{-- Password field --}}





@if($errors->has('password'))

{{ $errors->first('password') }}

@endif

{{-- Login field --}}



{{ __('adminlte::adminlte.remember_me') }}



{{ __('adminlte::adminlte.sign_in') }}



La variable {{ $login_url }} nos conduce al controlador login. Esta variable fue declarada previamente. El controlador login a su vez invoca a un controlador global llamado AuthenticatesUsers. Dentro de este archivo encontramos la clase login que recibe los parámetros del form. public function login(Request $request) { $this->validateLogin($request);// se hace una solicitud a una function que valida los parametros del form. if (method_exists($this, 'hasTooManyLoginAttempts') && $this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); return $this->sendLockoutResponse($request); } if ($this->attemptLogin($request)) { return $this->sendLoginResponse($request); } $this->incrementLoginAttempts($request); return $this->sendFailedLoginResponse($request); }

protected function validateLogin(Request $request) { $request->validate([ $this->username() => 'required|string', 'password' => 'required|string', ]); }

Esta función valida el nombre de usuario y contraseña, comprueba que existan y las valida mediante el helper validate.

Si la validación es correcta, seremos redirigidos al controlador home gracias a la función redirectTo. public function redirectPath() { if (method_exists($this, 'redirectTo')) { return $this->redirectTo(); } return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; //controlador home }

Añadiendo Roles Usuario public function store(Request $request){ $this->validate($request, [ 'name' => 'required', 'email' => 'required|email|unique:users,email', 'password' => 'required|same:confirm-password', 'roles' => 'required' ]); $input = $request->all(); $input['password'] = Hash::make($input['password']); $user = User::create($input); $user->assignRole($request->input('roles')); return redirect()->route('users.index') ->with('success','User created successfully'); }

Añadiendo Permisos a los Roles public function store(Request $request){ $this->validate($request, [ 'name' => 'required|unique:roles,name', 'permission' => 'required', ]); $role = Role::create(['name' => $request->input('name')]); $role->syncPermissions($request->input('permission')); return redirect()->route('roles.index') ->with('success','Role created successfully'); }

2.

Para la bitácora de usuarios el sistema contará con un administrador de usuarios.

3.

Vector obtenerUsuarios(String entidad, String order){

Connection cnn = null; CallableStatement cs = null; ResultSet rs = null; ConexionBD con = new ConexionBD(); Vector listaResult = new Vector(); try{ cnn=con.abrirConexionAtencion(); cs=cnn.prepareCall("{call PKG_USUARIOS.GET_USUARIO(?,?,?)}"); cs.setString(1,entidad); cs.setString(2, order); cs.registerOutParameter(3, OracleTypes.CURSOR); cs.executeQuery(); rs=(ResultSet)cs.getObject(3); while(rs.next()){ JsonJTableExpenseBean users = new JsonJTableExpenseBean(); users.setId(rs.getInt("ID")); users.setNombre(rs.getString("LOGIN")); users.setNombre(rs.getString("PASSWORD")); users.setPerfil(rs.getString("ROLID")); listaResult.add(users); } } catch (NamingException e) { logger.info("Error NamingException en el metodo obtenerUsuarios " + e.getMessage()); e.printStackTrace(); } catch (SQLException e) { logger.info("Error SQLException metodo obtenerUsuarios " + e.getMessage()); e.printStackTrace(); }catch(Exception ex){ logger.info("Error en el metodo obtenerUsuarios " + ex.getMessage()); }finally { super.cerrarCallable(cs); super.cerrarResultSet(rs); super.cerrarConexion(cnn); } return listaResult; } public JsonJTableExpenseBean setUsuarios(String login, String password, String rolId){ Connection cnn = null; CallableStatement cs = null; ResultSet rs = null; JsonJTableExpenseBean usuarios = new JsonJTableExpenseBean(); ConexionBD con = new ConexionBD(); try{ cnn=con.abrirConexionAtencion(); cs=cnn.prepareCall("{call PKG_USUARIOS.SET_USUARIO(?,?,?,?,?) }"); cs.setInt(1, login); cs.setString(2, password); cs.setString(3, rolId); cs.registerOutParameter(4, OracleTypes.NUMERIC); cs.registerOutParameter(5, OracleTypes.VARCHAR); cs.executeQuery(); usuarios.setCodigoRespuesta(cs.getString(4)); usuarios.setMensajeRespuesta(cs.getString(5));

} catch (NamingException e) { logger.info("Error NamingException en el metodo setUsuarios " + e.getMessage()); e.printStackTrace(); } catch (SQLException e) { logger.info("Error SQLException en el metodo setUsuarios " + e.getMessage()); e.printStackTrace(); }catch(Exception ex){ logger.info("Error en el metodo setUsuarios " + ex.getMessage()); }finally { super.cerrarCallable(cs); super.cerrarResultSet(rs); super.cerrarConexion(cnn); } return usuarios; } public JsonJTableExpenseBean updUsuarios(Integer id, String login, String password, Integer rolId){ Connection cnn = null; CallableStatement cs = null; ResultSet rs = null; JsonJTableExpenseBean usuarios = new JsonJTableExpenseBean(); ConexionBD con = new ConexionBD(); try { cnn=con.abrirConexionAtencion(); cs=cnn.prepareCall("{call PKG_USUARIOS.UPD_USUARIO(?,?,?,?,?,?) }"); cs.setInt(1, id); cs.setString(2, login); cs.setString(3, password); cs.setInt(4, rolId); cs.registerOutParameter(5, OracleTypes.NUMERIC); cs.registerOutParameter(6, OracleTypes.VARCHAR); cs.executeQuery(); usuarios.setCodigoRespuesta(cs.getString(5)); usuarios.setMensajeRespuesta(cs.getString(6)); }catch (NamingException e){ logger.info("Error NamingException en el metodo updUsuarios " + e.getMessage()); e.printStackTrace(); }catch (SQLException e){ logger.info("Error SQLException en el metodo updUsuarios " + e.getMessage()); e.printStackTrace(); }catch(Exception ex){ logger.info("Error en el metodo updUsuarios " + ex.getMessage()); }finally { super.cerrarCallable(cs); super.cerrarResultSet(rs); super.cerrarConexion(cnn); } return usuarios; } public JsonJTableExpenseBean delUsuarios(Integer id){ Connection cnn = null; CallableStatement cs = null; ResultSet rs = null; JsonJTableExpenseBean usuarios = new JsonJTableExpenseBean(); ConexionBD con = new ConexionBD(); try { cnn=con.abrirConexionAtencion();

cs=cnn.prepareCall("{call PKG_USUARIOS.DEL_USUARIO(?,?,?) }"); cs.setInt(1, id); cs.registerOutParameter(2, OracleTypes.NUMERIC); cs.registerOutParameter(3, OracleTypes.VARCHAR); cs.executeQuery(); usuarios.setCodigoRespuesta(cs.getString(2)); usuarios.setMensajeRespuesta(cs.getString(3)); } catch (NamingException e) { logger.info("Error NamingException en el metodo delUsuarios " + e.getMessage()); e.printStackTrace(); } catch (SQLException e) { logger.info("Error SQLException en el metodo delUsuarios " + e.getMessage()); e.printStackTrace(); }catch(Exception ex){ logger.info("Error en el metodo delUsuarios " + ex.getMessage()); }finally { super.cerrarCallable(cs); super.cerrarResultSet(rs); super.cerrarConexion(cnn); } return usuarios; }

Para editar Usuario

Para eliminar Usuario

4. Para esta sesión el modulo tratara sobre cómo ayudar a los usuarios de cómo utilizar la aplicación web. Esto lo haremos posible mediante una página llamada ayuda

Al entrar en la pagina de ayuda, nos encontraremos con una pantalla de ayuda en la cual nos saldrán opciones de información e incluso como usar la aplicación web. Tambien tendremos la opción de enviar una solicitud en caso de alguna pregunta que no encuentre respuesta.

Conclusiones:

Esta semana hemos visto como como modularizar el sistema, permitiendo el acceso de cada usuario según su perfil. La seguridad ante una aplicación es importante ya que no todos necesitan tener 100% de acceso a toda la información. También vemos que las aplicaciones deben tener una sesión de ayuda del uso de la aplicación o cualquier cosa que tenga que ver con el aplicativo.

Bibliografía

IACC (2019). Integración de un sistema de información con la base de datos. Taller de integración de software Semana 3.