Ejemplo con control de permisos o niveles de usuario
1. 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
2. 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
3. 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
4. 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()
5. 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
6. 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
7. 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
8. 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
9. 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
10. 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
11. 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
13. 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()
14. 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
15. 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"
16. 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