ejemplo con control de permisos o niveles de usuario

16
Ronald Toscano Pretelt MisClases.Hol.Es ========================================================================================================================================================================= pág. 1 Versión: 20150212 EJEMPLO CON CONTROL DE PERMISOS O NIVELES DE USUARIO MODIFICAR LAS PROPIEDADES DEL PROYECTO Menú proyecto / propiedades de facturación (o como se llame el proyecto Deshabilitamos habilitar marco de trabajo de la aplicación. En la opción OBJETO DE INICIO sub main

Upload: ronaldtoscano18

Post on 19-Feb-2017

142 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 1 Versión: 20150212

EJEMPLO CON CONTROL DE PERMISOS O NIVELES DE USUARIO

MODIFICAR LAS PROPIEDADES DEL PROYECTO

Menú proyecto / propiedades de facturación (o como se llame el proyecto

Deshabilitamos habilitar marco de trabajo de la aplicación.

En la opción OBJETO DE INICIO sub main

Page 2: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 2 Versión: 20150212

AHORA NECESITAREMOS UN MODULO

Lo primero que haremos será crear un Módulo con el siguiente código:

Module miModulo Private usuarioAutenticado As Boolean = False ''para verificar si logró iniciar sesión Private nombreDeUsuario As String Private nivelDelUsuario As String Public Sub Main() '' habilitamos los estilos visuales Application.EnableVisualStyles() '' mostramos el usuario de login Dim frmlogin As New frmAutenUsuar frmlogin.ShowDialog() If (usuarioAutenticado = True) Then '' mostramos el formulario principal Application.Run(frmPrincipal) End If End Sub Public Property userAutenticado() As Boolean '' similar encapsulacion en poo Get Return usuarioAutenticado End Get Set(ByVal Value As Boolean) usuarioAutenticado = Value End Set End Property Public Property userNombre() As String ''USER NOMBRE ALMACENA EL NOMBRE DEL USUARIO Get Return nombreDeUsuario

Page 3: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 3 Versión: 20150212

End Get Set(ByVal value As String) nombreDeUsuario = value End Set End Property Public Property userNivel() As String ''USERNIVEL ALMACENA EL NIVEL DEL USUARIO Get Return nivelDelUsuario End Get Set(value As String) nivelDelUsuario = value End Set End Property End Module

AHORA CREAMOS EL FORMULARIO DE INGRESO Y LO CODIFICAMOS

Page 4: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 4 Versión: 20150212

Imports MySql.Data Imports MySql.Data.MySqlClient Public Class frmAutenUsuar Public intentos As Integer = 0 '' VARIABLE PARA CONTROLAR LOS INTENTOS DE LOGUE '' LA FUNCION EXISTE USUARIO() ES LA ENCARGADA DE VERIFICAR SI EL USUARIO EXISTE EN LA BASE DE DATOS Function existeusuario(ByVal usuario As String, ByVal password As String) As Boolean Dim conexion As New MySqlConnection Dim da As New MySqlDataAdapter Dim ds As New DataSet Dim consulta As String Dim autenticado As Boolean = False Try conexion.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura;persist security info=false" consulta = "select user, password, tipoUsuario from usuarios where user='" & usuario & "' and password ='" & password & "';" conexion.Open() da = New MySqlDataAdapter(consulta, conexion) ds.Clear() '' LIMPIAMOS EL DATASET da.Fill(ds, "usuarios") ''LLENAMOS EL DATAADAPTER CON EL CONTENIDO DE LA TABLA USUARIOS If (ds.Tables("usuarios").Rows.Count() = 0) Then '' PREGUNTAMOS SI NO HUBO RESULTADOS PARA SABER SI EL USUARIO NO EXISTE intentos = intentos + 1 If intentos > 2 Then MessageBox.Show("Ha sobre pasado el numero de intentos permitidos", "Autenticación de Usuarios", MessageBoxButtons.OK) Application.Exit() Else MessageBox.Show("Usuario y/o contraseña no válidos", "Autenticación de usuarios", MessageBoxButtons.OK) txtusuario.Text = "" txtpassword.Text = "" txtusuario.Focus()

Page 5: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 5 Versión: 20150212

End If autenticado = False ''EL USUARIO NO SE AUTENTICÓ Return (False) '' LA FUNCIÓN RETORNA QUE EL USUARIO NO EXISTE Else '' SI EL USUARIO EXISTE, ENTONCES PROCEDEMOS A CONSULTAR Y ALMACENAR LOS DATOS DEL USUARIO EN LAS PROPIEDADES QUE '' CREAMOS EN EL MODULO COMO PROPERTY Dim sqluser As MySqlCommand = New MySqlCommand Dim sqlnivel As MySqlCommand = New MySqlCommand sqluser.Connection = conexion sqlnivel.Connection = conexion sqluser.CommandText = "select user from usuarios where user = '" & usuario & "';" userNombre = sqluser.ExecuteScalar() sqlnivel.CommandText = "select tipoUsuario from usuarios where user = '" & usuario & "';" userNivel = sqlnivel.ExecuteScalar() MessageBox.Show("Bienvenido al Sistema " + userNombre + ". Su nivel de permisos es: " + userNivel, "Autenticación de Usuarios", MessageBoxButtons.OK) autenticado = True '' LA FUNCION DEVUELVE ENTONCES QUE EL USUARIO SI EXISTE Y SE PUEDE LOGUAR userAutenticado = True Return (True) End If Catch ex As Exception MessageBox.Show("Ocurrió un error al intentar autenticarse. ERROR: ", "Autenticación de Usuarios", MessageBoxButtons.OK) End Try conexion.Close() '' CERRAMOS LA CONEXION DE LA BASE DE DATOS Return (True) End Function

Page 6: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 6 Versión: 20150212

Private Sub btnSalir_Click(sender As System.Object, e As System.EventArgs) Handles btnSalir.Click Application.Exit() ''DETENEMOS LA EJECUCIÓN DE LA APLICACIÓN End Sub Private Sub btnIngresar_Click(sender As System.Object, e As System.EventArgs) Handles btnIngresar.Click '' SI EL USUARIO EXISTE, LE ENVIAMOS LOS DATOS DEL LOGUEO AL MODULO If existeusuario(txtusuario.Text, txtpassword.Text) Then miModulo.userAutenticado = True Me.Close() ''CERRAMOS EL FORMULARIO DE INGRESO End If End Sub End Class

AHORA CREAMOS EL FORMULARIO PRINCIPAL Y LO CODIFICAMOS

Page 7: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 7 Versión: 20150212

Public Class frmPrincipal Private Sub frmPrincipal_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load lblNivelUsuario.Text = userNivel lblNomUsuario.Text = userNombre End Sub Private Sub SalirToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SalirToolStripMenuItem.Click Application.Exit() End Sub Private Sub ClientesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ClientesToolStripMenuItem.Click frmClientes.Show() End Sub End Class ESTE ES EL FORMULARIO DESDE EL QUE TRABAJAREMOS LOS PERMISOS SEGÚN EL NIVEL DE USUARIO

Page 8: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 8 Versión: 20150212

Public Class frmClientes Dim conexion As New MySqlConnection Dim da As New MySqlDataAdapter Dim ds As New DataSet Dim sqlcmd As New MySqlCommand Dim consulta As String Dim dr As MySqlDataReader Private Sub llenarCombo() Me.cboCedula.Items.Clear() Dim con As New MySqlConnection Try con.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura; persist security info= false" con.Open() consulta = "select cedulacliente from Clientes" sqlcmd.CommandType = CommandType.Text sqlcmd.Connection = con sqlcmd.CommandText = consulta dr = sqlcmd.ExecuteReader() If dr.HasRows = True Then While dr.Read() Me.cboCedula.Items.Add(dr.GetValue(0)) End While cboCedula.Text = cboCedula.Items(0) End If dr.Close() ''CERRAMOS EL DATAREADER con.Close() ''CERRAMOS LA CONEXION CON LA BASE DE DATOS Catch ex As Exception MessageBox.Show("No se pudo cargar las cedulas. ERROR: " + ex.ToString) End Try End Sub

Page 9: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 9 Versión: 20150212

Private Sub consultarCedula() Try conexion.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura;persist security info=false" conexion.Open() consulta = "Select * from clientes where cedulacliente = '" & cboCedula.Text & "';" sqlcmd.CommandType = CommandType.Text sqlcmd.Connection = conexion sqlcmd.CommandText = consulta dr = sqlcmd.ExecuteReader() If dr.HasRows = True Then While dr.Read() Me.txtNombre.Text = dr(1) Me.txtApellido.Text = dr(2) Me.mskFecha.Text = dr(3).ToString() Me.txtTelefono.Text = dr(4) End While End If dr.Close() conexion.Close() Catch ex As Exception MessageBox.Show("Error al llenar los datos. ERROR: " + ex.ToString) End Try End Sub Private Sub cmdGuardar_Click(sender As System.Object, e As System.EventArgs) Handles cmdGuardar.Click If Me.txtApellido.Text = "" Or cboCedula.Text = "" Or txtNombre.Text = "" Or mskFecha.Text = "" Or txtTelefono.Text = "" Then MessageBox.Show("Debe llenar todos los campos para ingresar en la base de datos", "Administración de Clientes", MessageBoxButtons.OK) cboCedula.Focus() Else Dim conn As New MySqlConnection

Page 10: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 10 Versión: 20150212

Try conn.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura; persist security info= false" conn.Open() sqlcmd.Connection = conn Dim sentencia As String Dim fecha As Date fecha = CDate(mskFecha.Text) sentencia = "insert into clientes (cedulaCliente,apellidoCliente,nombreCliente,fechaNac,telefonoCliente) values (" sentencia = sentencia + "'" & cboCedula.Text & "', '" & txtApellido.Text & "', '" & txtNombre.Text & "', '" & Format(fecha, "yyyy/MM/dd") & "', '" & txtTelefono.Text & "');" sqlcmd.CommandText = sentencia sqlcmd.ExecuteNonQuery() MessageBox.Show("El registro se ingresó correctamente", "Administración de Clientes", MessageBoxButtons.OK) Limpiar(Me) mskFecha.Text = "" cboCedula.Focus() llenarCombo() conn.Close() Catch ex As Exception MessageBox.Show("No se pudo ingresar el cliente en la base de datos. ERROR: " + ex.ToString, "Administración de Clientes", MessageBoxButtons.OK) cboCedula.Focus() End Try End If End Sub Private Sub frmClientes_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load With mskFecha Me.mskFecha.ValidatingType = GetType(Date) .Mask = "##/##/####" End With lblPermisos.Text = userNivel

Page 11: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 11 Versión: 20150212

lblUsuario.Text = userNombre llenarcombo() consultarCedula() End Sub Private Sub cmdSalir_Click(sender As System.Object, e As System.EventArgs) Handles cmdSalir.Click Me.Close() End Sub Private Sub cboCedula_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles cboCedula.KeyPress If Asc(e.KeyChar) = 13 Then cmdBuscar_Click(Nothing, Nothing) End If End Sub Private Sub cboCedula_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cboCedula.SelectedIndexChanged consultarCedula() End Sub Private Sub cmdBuscar_Click(sender As System.Object, e As System.EventArgs) Handles cmdBuscar.Click If Me.cboCedula.Text <> "" Then Try Dim datoEncontrado As String Dim cedula As String Dim sqlcedula As MySqlCommand = New MySqlCommand Dim sqlnombre As MySqlCommand = New MySqlCommand Dim sqlapellido As MySqlCommand = New MySqlCommand Dim sqlfnac As MySqlCommand = New MySqlCommand Dim sqltel As MySqlCommand = New MySqlCommand Dim dr1 As MySqlDataReader cedula = Me.cboCedula.Text

Page 12: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 12 Versión: 20150212

conexion.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura; persist security info= false" conexion.Open() consulta = "select cedulacliente from Clientes where cedulaCliente = '" & cedula & "';" sqlcmd.CommandType = CommandType.Text sqlcmd.Connection = conexion sqlcmd.CommandText = consulta dr1 = sqlcmd.ExecuteReader() If dr1.HasRows = True Then sqlcedula.Connection = conexion sqlnombre.Connection = conexion sqlapellido.Connection = conexion sqlfnac.Connection = conexion sqltel.Connection = conexion dr1.Close() sqlnombre.CommandText = "Select nombreCliente from clientes where cedulacliente = '" & cedula & "';" datoEncontrado = sqlnombre.ExecuteScalar() Me.txtNombre.Text = datoEncontrado sqlapellido.CommandText = "Select apellidoCliente from clientes where cedulaCliente = '" & cedula & "';" datoEncontrado = sqlapellido.ExecuteScalar() Me.txtApellido.Text = datoEncontrado sqlfnac.CommandText = "Select fechaNac from clientes where cedulaCliente = '" & cedula & "';" datoEncontrado = sqlfnac.ExecuteScalar().ToString Me.mskFecha.Text = datoEncontrado sqltel.CommandText = "Select telefonoCliente from clientes where cedulaCliente = '" & cedula & "';" datoEncontrado = sqltel.ExecuteScalar()

Page 13: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 13 Versión: 20150212

Me.txtTelefono.Text = datoEncontrado Else MessageBox.Show("La Cedula " + cedula + " No Existe!!") cboCedula.Text = Nothing cboCedula.Focus() End If conexion.Close() Catch ex As Exception MessageBox.Show("No se pudo buscar la cédula. ERROR: " + ex.ToString) End Try Else MessageBox.Show("Por favor escriba la cedula del cliente que desea buscar!", "Búsqueda de Cliente", MessageBoxButtons.OK) Me.cboCedula.Focus() End If End Sub Private Sub cmdLimpiar_Click(sender As System.Object, e As System.EventArgs) Handles cmdLimpiar.Click txtApellido.Text = Nothing txtNombre.Text = Nothing txtTelefono.Text = Nothing cboCedula.Text = Nothing mskFecha.Text = Nothing lblEdad.Text = Nothing cboCedula.Focus()

Page 14: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 14 Versión: 20150212

End Sub Private Sub cmdEliminar_Click(sender As System.Object, e As System.EventArgs) Handles cmdEliminar.Click If Me.cboCedula.Text <> "" Then If userNivel = "Administrador" Then Dim conex As New MySqlConnection Try conex.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura; persist security info= false" conex.Open() Dim Sqleliminar As MySqlCommand = New MySqlCommand() Sqleliminar.Connection = conex Sqleliminar.CommandType = CommandType.Text Sqleliminar.CommandText = "delete from clientes where cedulaCliente = '" & cboCedula.Text & "';" Sqleliminar.ExecuteNonQuery() MessageBox.Show("El registro se eliminó correctamente", "Clientes", MessageBoxButtons.OK) cmdLimpiar_Click(Nothing, Nothing) Catch ex As Exception MessageBox.Show("El cliente no se encontró, Por favor verifique el código...", "Clientes", MessageBoxButtons.OK) Me.cboCedula.Focus() End Try conex.Close() llenarCombo() Else MessageBox.Show("El usuario " + userNombre + "no tiene permisos suficientes para ejecutar esta accion", "Eliminar Cliente", MessageBoxButtons.OK) End If Else MessageBox.Show("Por favor escriba el código del cliente que desea eliminar.", "Eliminar Cliente", MessageBoxButtons.OK) Me.cboCedula.Focus() End If

Page 15: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 15 Versión: 20150212

End Sub Private Sub cmdModificar_Click(sender As System.Object, e As System.EventArgs) Handles cmdModificar.Click If Me.cboCedula.Text <> "" Then If userNivel = "Administrador" Then Dim cxn As New MySqlConnection Dim c As New MySqlConnection Try Dim sqlActualizar As String Dim sqlced As MySqlCommand = New MySqlCommand Dim ced As String Dim drActualizar As MySqlDataReader ced = Me.cboCedula.Text cxn.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura; persist security info= false" cxn.Open() consulta = "select cedulacliente from Clientes where cedulaCliente = '" & ced & "';" sqlcmd.CommandType = CommandType.Text sqlcmd.Connection = cxn sqlcmd.CommandText = consulta drActualizar = sqlcmd.ExecuteReader() If drActualizar.HasRows = True Then Dim fecha As Date fecha = CDate(mskFecha.Text) sqlActualizar = "Update clientes set nombreCliente = '" & txtNombre.Text & "', apellidoCliente ='" & txtApellido.Text & "'," sqlActualizar += " fechaNac ='" & Format(fecha, "yyyy/MM/dd") & "', telefonoCliente = '" & txtTelefono.Text & "' where cedulaCliente = '" & cboCedula.Text & "';" Dim cmdactualizar As MySqlCommand = New MySqlCommand cmdactualizar.CommandType = CommandType.Text cmdactualizar.Connection = c c.ConnectionString = "server=localhost; user=root; password=toor; database=bdFactura; persist security info= false"

Page 16: Ejemplo con control de permisos o niveles de usuario

Ronald Toscano Pretelt MisClases.Hol.Es =========================================================================================================================================================================

pág. 16 Versión: 20150212

c.Open() cmdactualizar.CommandText = sqlActualizar cmdactualizar.ExecuteNonQuery() MessageBox.Show("Los Datos se actualizaron correctamente") Else MessageBox.Show("La Cedula " + ced + " No Existe!!") cboCedula.Text = Nothing cboCedula.Focus() End If drActualizar.Close() cxn.Close() c.Close() Catch ex As Exception MessageBox.Show("No se pudo modificar los datos. ERROR: " + ex.ToString) End Try Else MessageBox.Show("El usuario " + userNombre + "no tiene permisos suficientes para ejecutar esta accion", "Eliminar Cliente", MessageBoxButtons.OK) End If Else MessageBox.Show("Por favor escriba la cedula del cliente que desea buscar!", "Búsqueda de Cliente", MessageBoxButtons.OK) Me.cboCedula.Focus() End If End Sub End Class