none
permisos a usuarios RRS feed

  • Pregunta

  • buenas noches amigos, esta vez tengo otro problema, en un aplicacion de winforms q esta conectada a una bd en mysql tengo la tabla usuario que es la sig:

    id_usuario int(2)NOT NULL,
    nom_usuario varchar(15)NOT NULL,
    pass varchar(15)NOT NULL,
    nombres_usuario varchar(20),
    apellidos_usuario varchar(40),
    tipo_usuario varchar(13),

    y me guarda y valida muy bn el nom_usuario y el pass, el problema esta que en tipo_usuario tengo solo 2 administrador y usuario,

    como puedo validar que si es admin tenga acceso a todo y si es usuario solo algunas cosas, alguien me podria decir porfavor

    como seria la validacion de este campo ,,,, muchas gracias de antemano

    martes, 15 de diciembre de 2015 6:40

Respuestas

  • Hola.
    En un modulo declaras una variable como esta:

    Module Inicio
        Public mTipoUsuario As String
        'demas variables, Subs y Functions
    End Module

    En un Form como el de la imagen, copia y pega el siguiente codigo.

    Option Explicit On
    Option Strict On
    Imports System.Data.OleDb

    Public Class FrmLogin

        Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
            If lF_bLogin() = True Then
                'Llamada a tu Form Inicial
            Else
                MessageBox.Show("Usuario y/o Password erroneo(s)")
            End If
        End Sub

        Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
            Me.Close()
        End Sub

        Private Function lF_bLogin() As Boolean
            Try
                Dim lsConexionACCESS As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\TU_BASE_DE_DATOS.accdb"
                Using loConexion As New OleDbConnection(lsConexionACCESS)
                    loConexion.Open()
                    Dim lsQuery As String = "Select tipo_usuario From usuario Where nom_usuario=@nom_usuario And pass=@pass"
                    Using loComando As New OleDbCommand(lsQuery, loConexion)
                        loComando.Parameters.Add("@nom_usuario", OleDbType.VarChar, 15).Value = Me.txtUserLogin.Text
                        loComando.Parameters.Add("@pass", OleDbType.VarChar, 15).Value = Me.txtUserPassword.Text
                        Dim loValor As Object = loComando.ExecuteScalar()
                        If IsDBNull(loValor) = False Then
                            Inicio.mTipoUsuario = loValor.ToString
                        End If
                    End Using
                End Using
                Return True
            Catch ex As Exception
                Throw (ex)
                Return False
            End Try
        End Function
    End Class

    En el Load del Form Inicial:
    If Inicio.mTipoUsuario="Administrador" Then
        Button1.Enabled=True
    Else
        Button1.Enabled=False
    End If

    P.D.
    El ejemplo es para Access, tendras que adaptarlo para MySql

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta victor valencia jueves, 17 de diciembre de 2015 4:04
    miércoles, 16 de diciembre de 2015 8:48
  • Victor.

    Mira comenzaremos con crear un modulo para almacenar en la variable el tipo de usuario.

    Module Local
        Public TipoUsuario As String
    End Module

    Luego capturaremos en el FORM LOGIN el tipo de usuario del quien se logea (Algo asi), ahi estamos almacenando en la variable el tipo de usuario.

     ' Configuramos una conexión con la base de datos de SQL Server
                Using cnn As New SqlConnection("CONEXION A TU BASE DE DATOS")
                    ' Creamos el comando
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    ' Construimos la consulta T-SQL que deseamos ejecutar           
                    cmd.CommandText = "SELECT Tipo_User FROM Usuarios WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    ' Abrimos la conexión
                    cnn.Open()
                    ' Ejecutamos la consulta
                    Dim value As Object = cmd.ExecuteScalar()
                    ' Pasamos el valor a la variable
                    TipoUsuario= Convert.ToString(value)
                    ' Mostramos el valor de la variable
                    'MessageBox.Show(tempcorrelativo)
                End Using

    Luego en el mismo Form de Logeo validaremos el usuario, si su password y user estan correctos.

                Try
                    Dim con As New SqlConnection
                    Dim cmd As New SqlCommand
                    Dim rd As SqlDataReader
                    con.ConnectionString = "CONEXION A BASE DE DATOS")
                    cmd.Connection = con
                    con.Open()
                    cmd.CommandText = "SELECT USUARIO, CONTRASEÑA FROM Usuarios WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    rd = cmd.ExecuteReader
                    If rd.HasRows Then
                        'CIERRA LA VENTANA LOGIN
                        Me.Hide()
                        'ABRE EL FORMULARIO
                        FrmMenu.Show()
                    Else
     "AQUI PONEMOS UN MENSAJE DE ERROR SI ES CORRECTO O NO, Y SI NO ES CORRECTO SE LIMPIARA LOS TEXTBOX
                        txtusuario.Tex= ""
                        txtcontraseña.Text= ""
                    End If
                Catch ex As Exception
                    ' Se ha producido un error.
                    MessageBox.Show(ex.Message)
                End Try

    ACUERDATE QUE ESTO TIENES QUE ADAPTARLO A TU PROYECTO O GUIARTE, MAS ABAJO ESTA EL LOGEO COMPLETO DEL COMO YO UTILIZO EN PROYECTOS SIEMPLES, TODO ESO LO HAGO EN EL BOTON INGRESAR O BOTON DE LOGEO.

        Private Sub btningresar_Click(sender As Object, e As EventArgs) Handles btningresar.Click
            Try
                ' Configuramos una conexión con la base de datos de SQL Server
                Using cnn As New SqlConnection("CONEXION BASE DE DATOS")
                    ' Creamos el comando
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    ' Construimos la consulta T-SQL que deseamos ejecutar           
                    cmd.CommandText = "SELECT Tipo_Usuario FROM Usuarios WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    ' Abrimos la conexión
                    cnn.Open()
                    ' Ejecutamos la consulta
                    Dim value As Object = cmd.ExecuteScalar()
                    ' Pasamos el valor a la variable
                    TipoUsuario= Convert.ToString(value)
                    ' Mostramos el valor de la variable
                    'MessageBox.Show(tempcorrelativo)
                End Using
                           Try
                    Dim con As New SqlConnection
                    Dim cmd As New SqlCommand
                    Dim rd As SqlDataReader
                    con.ConnectionString = "CONEXION BASE DE DATOS")
                    cmd.Connection = con
                    con.Open()
                    cmd.CommandText = "SELECT USUARIO, CONTRASEÑA FROM Tipo_Usuario WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    rd = cmd.ExecuteReader
                    If rd.HasRows Then
                        'CIERRA LA VENTANA LOGIN
                        Me.Hide()
                        'ABRE EL FORMULARIO
                        FrmMenu.Show()
                    Else
               "MOSTRAMOS MENSAJE DE ERROR DE LOGEO"
                        txtusuario.text= ""
                        txtcontraseña.text= ""
                    End If
                Catch ex As Exception
                    ' Se ha producido un error.
                    MessageBox.Show(ex.Message)
                End Try
            Catch ex As Exception
                ' Se ha producido un error.
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Y POR ULTIMO EN LOS FORM O EN EL MENU PRINCIPAL QUE QUIERES QUE SE HABILITEN O DESHABILITEN LOS BOTONES O MENUS SOLO TIENES QUE APLICAR UNA CONDICION EL EL EVENTO LOAD.

    If TipoUsuario="2" Then
    btnreporte.Enabled=false
    

    ALGO POR AHI ESPERO QUE TE HAYA SIDO DE AYUDA.


    • Marcado como respuesta victor valencia jueves, 17 de diciembre de 2015 4:04
    miércoles, 16 de diciembre de 2015 14:17

Todas las respuestas

  • Hola:
    Cuando se inicia la aplicacion, el primer form que tienes que presentar ,es uno donde le pidas el usuario y la contraseña.
    Lees de la tabla con los 2 valores introducidos y si son correctos, memorizas el valor del campo tipo_usuario (bastaria con que fuese un numero, ejemplo 1 = Administrador, 2 = Normal).
    En todos los Form, en el Load preguntas por el tipo memorizado, si es 1 le habilitas los controles que necesites, si es 2 le deshabilitas los controles.

    P.D.
    Esta seria una forma muy simple de distinguir los derechos de los usuarios. Este es un tema demasiado amplio para explicarlo en un foro como este

    Un saludo desde Bilbo
    Carlos

    martes, 15 de diciembre de 2015 8:59
  • buenos dias carlos, gracias por contestar, mira asi es como valido mi login:

     Dim tabla As New DataTable
            Try
                Dim da As New MySqlDataAdapter("SELECT nom_usuario, pass FROM usuarios WHERE nom_usuario=@usu and pass= @pas limit 1;", cn)
                da.SelectCommand.Parameters.AddWithValue("@usu", usuario)
                da.SelectCommand.Parameters.AddWithValue("@pas", password)
                da.SelectCommand.CommandType = CommandType.Text
                da.Fill(tabla) If tabla.Rows.Count > 0 Then
                    Return True
                Else
                    Return False
                End If
            Catch ex As MySqlException

            End Try

            Return True

    lo que no entiendo es  como memorizar el valos tipo_usuario , me podrias ayudar porfavor

    martes, 15 de diciembre de 2015 15:28
  • mira, la manera mas facil seria, al dar clic en el boton (al cual solo quieres que entre el admin) deberia validar que tipo de usuario es, y si es un usuario comun entonces deshabilita ese boton para que no pueda accesar, 

    para validar el usuario lo puedes hacer de muchas maneras, podrias guardar en 1 variable si eres admin o usuario ,(esto seria solo mientras el formulario esté abierto), y entonces cada vez que des click mandas a llamar a esa variable y ya sabrias si puede acceder, o si tiene acceso restringido, si quieres información mas detallada porfavor escrimebe y con gusto te ayudo

    martes, 15 de diciembre de 2015 16:32
  • hola edgar gracias tambien por responder, si mira eso es lo que no entiendo como hacerlo , ya me valida todo muy bien lo de usuario y contraseña, lo que necesito es eso de como guardar en la vaiable y eso que me comentas tu y tambien carlos, me podria explicar como hacer eso porfavor, es que en eso si estoy perdido....
    martes, 15 de diciembre de 2015 16:55
  • Que tal Victor.

    Lo que yo hago es almacenar en un variable el ID del tipo de usuario, y despues hago una condiciones por ejemplo;

    ADMINISTRADOR = 1

    USUARIO = 2

    La Condicion seria

    If TipoUsuario=2 then

    'AQUI HABILITAS LOS BOTONES O EN EL CASO QUE TENGA UN MENU STRIP LAS OPCIONES PARA QUE SE HABILITEN

    eso es lo mas practico que harias.

    Pero primero debes almacenar el tipo de usuario en una variable.

    martes, 15 de diciembre de 2015 23:07
  • buenas noches oscar, gracias por contestar, ese es mi problema no se como jalar el tipo de usuario por que solo valido usuario y contraseña, me podrias dar un ejemplo o decirme como jalar tambien el tipo de usuario??? podria ser en el select que hago??? o como????

    tengo esto pero no se como, esto lo hago en una clase:

    Dim tabla As New DataTable
            Try
                Dim da As New MySqlDataAdapter("SELECT nom_usuario, pass FROM usuarios WHERE nom_usuario=@usu and pass= @pas limit 1;", cn)
                da.SelectCommand.Parameters.AddWithValue("@usu", usuario)
                da.SelectCommand.Parameters.AddWithValue("@pas", password)
                da.SelectCommand.CommandType = CommandType.Text
                da.Fill(tabla) If tabla.Rows.Count > 0 Then
                    Return True
                Else
                    Return False
                End If
            Catch ex As MySqlException

            End Try

            Return True

    miércoles, 16 de diciembre de 2015 1:48
  • Hola.
    En un modulo declaras una variable como esta:

    Module Inicio
        Public mTipoUsuario As String
        'demas variables, Subs y Functions
    End Module

    En un Form como el de la imagen, copia y pega el siguiente codigo.

    Option Explicit On
    Option Strict On
    Imports System.Data.OleDb

    Public Class FrmLogin

        Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
            If lF_bLogin() = True Then
                'Llamada a tu Form Inicial
            Else
                MessageBox.Show("Usuario y/o Password erroneo(s)")
            End If
        End Sub

        Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
            Me.Close()
        End Sub

        Private Function lF_bLogin() As Boolean
            Try
                Dim lsConexionACCESS As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\TU_BASE_DE_DATOS.accdb"
                Using loConexion As New OleDbConnection(lsConexionACCESS)
                    loConexion.Open()
                    Dim lsQuery As String = "Select tipo_usuario From usuario Where nom_usuario=@nom_usuario And pass=@pass"
                    Using loComando As New OleDbCommand(lsQuery, loConexion)
                        loComando.Parameters.Add("@nom_usuario", OleDbType.VarChar, 15).Value = Me.txtUserLogin.Text
                        loComando.Parameters.Add("@pass", OleDbType.VarChar, 15).Value = Me.txtUserPassword.Text
                        Dim loValor As Object = loComando.ExecuteScalar()
                        If IsDBNull(loValor) = False Then
                            Inicio.mTipoUsuario = loValor.ToString
                        End If
                    End Using
                End Using
                Return True
            Catch ex As Exception
                Throw (ex)
                Return False
            End Try
        End Function
    End Class

    En el Load del Form Inicial:
    If Inicio.mTipoUsuario="Administrador" Then
        Button1.Enabled=True
    Else
        Button1.Enabled=False
    End If

    P.D.
    El ejemplo es para Access, tendras que adaptarlo para MySql

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta victor valencia jueves, 17 de diciembre de 2015 4:04
    miércoles, 16 de diciembre de 2015 8:48
  • Victor.

    Mira comenzaremos con crear un modulo para almacenar en la variable el tipo de usuario.

    Module Local
        Public TipoUsuario As String
    End Module

    Luego capturaremos en el FORM LOGIN el tipo de usuario del quien se logea (Algo asi), ahi estamos almacenando en la variable el tipo de usuario.

     ' Configuramos una conexión con la base de datos de SQL Server
                Using cnn As New SqlConnection("CONEXION A TU BASE DE DATOS")
                    ' Creamos el comando
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    ' Construimos la consulta T-SQL que deseamos ejecutar           
                    cmd.CommandText = "SELECT Tipo_User FROM Usuarios WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    ' Abrimos la conexión
                    cnn.Open()
                    ' Ejecutamos la consulta
                    Dim value As Object = cmd.ExecuteScalar()
                    ' Pasamos el valor a la variable
                    TipoUsuario= Convert.ToString(value)
                    ' Mostramos el valor de la variable
                    'MessageBox.Show(tempcorrelativo)
                End Using

    Luego en el mismo Form de Logeo validaremos el usuario, si su password y user estan correctos.

                Try
                    Dim con As New SqlConnection
                    Dim cmd As New SqlCommand
                    Dim rd As SqlDataReader
                    con.ConnectionString = "CONEXION A BASE DE DATOS")
                    cmd.Connection = con
                    con.Open()
                    cmd.CommandText = "SELECT USUARIO, CONTRASEÑA FROM Usuarios WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    rd = cmd.ExecuteReader
                    If rd.HasRows Then
                        'CIERRA LA VENTANA LOGIN
                        Me.Hide()
                        'ABRE EL FORMULARIO
                        FrmMenu.Show()
                    Else
     "AQUI PONEMOS UN MENSAJE DE ERROR SI ES CORRECTO O NO, Y SI NO ES CORRECTO SE LIMPIARA LOS TEXTBOX
                        txtusuario.Tex= ""
                        txtcontraseña.Text= ""
                    End If
                Catch ex As Exception
                    ' Se ha producido un error.
                    MessageBox.Show(ex.Message)
                End Try

    ACUERDATE QUE ESTO TIENES QUE ADAPTARLO A TU PROYECTO O GUIARTE, MAS ABAJO ESTA EL LOGEO COMPLETO DEL COMO YO UTILIZO EN PROYECTOS SIEMPLES, TODO ESO LO HAGO EN EL BOTON INGRESAR O BOTON DE LOGEO.

        Private Sub btningresar_Click(sender As Object, e As EventArgs) Handles btningresar.Click
            Try
                ' Configuramos una conexión con la base de datos de SQL Server
                Using cnn As New SqlConnection("CONEXION BASE DE DATOS")
                    ' Creamos el comando
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    ' Construimos la consulta T-SQL que deseamos ejecutar           
                    cmd.CommandText = "SELECT Tipo_Usuario FROM Usuarios WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    ' Abrimos la conexión
                    cnn.Open()
                    ' Ejecutamos la consulta
                    Dim value As Object = cmd.ExecuteScalar()
                    ' Pasamos el valor a la variable
                    TipoUsuario= Convert.ToString(value)
                    ' Mostramos el valor de la variable
                    'MessageBox.Show(tempcorrelativo)
                End Using
                           Try
                    Dim con As New SqlConnection
                    Dim cmd As New SqlCommand
                    Dim rd As SqlDataReader
                    con.ConnectionString = "CONEXION BASE DE DATOS")
                    cmd.Connection = con
                    con.Open()
                    cmd.CommandText = "SELECT USUARIO, CONTRASEÑA FROM Tipo_Usuario WHERE USUARIO='" & txtusuario.Text & "' AND CONTRASEÑA='" & txtcontraseña.Text & "'"
                    rd = cmd.ExecuteReader
                    If rd.HasRows Then
                        'CIERRA LA VENTANA LOGIN
                        Me.Hide()
                        'ABRE EL FORMULARIO
                        FrmMenu.Show()
                    Else
               "MOSTRAMOS MENSAJE DE ERROR DE LOGEO"
                        txtusuario.text= ""
                        txtcontraseña.text= ""
                    End If
                Catch ex As Exception
                    ' Se ha producido un error.
                    MessageBox.Show(ex.Message)
                End Try
            Catch ex As Exception
                ' Se ha producido un error.
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Y POR ULTIMO EN LOS FORM O EN EL MENU PRINCIPAL QUE QUIERES QUE SE HABILITEN O DESHABILITEN LOS BOTONES O MENUS SOLO TIENES QUE APLICAR UNA CONDICION EL EL EVENTO LOAD.

    If TipoUsuario="2" Then
    btnreporte.Enabled=false
    

    ALGO POR AHI ESPERO QUE TE HAYA SIDO DE AYUDA.


    • Marcado como respuesta victor valencia jueves, 17 de diciembre de 2015 4:04
    miércoles, 16 de diciembre de 2015 14:17
  • Muchas gracias a los 2, me sirvió muchisimo su código lo adapte por que tengo clase, cree un modulo y en el load del form me quedo muy bien, muchas gracias nuevamente, los volveré a molestar mas adelante por que ustedes son todos unos expertos y yo apenas empiezo .
    jueves, 17 de diciembre de 2015 4:07