none
¿Cuáles son las pautas para construir un Sistema con Login de 5 tipos distintos de Usuarios? RRS feed

  • Pregunta

  • Desde ya les agradesco sus respuestas!

    Mi duda se basa en que yo tengo construido un sistema con tres subsistemas (Compras, Ventas, Producción). Al mismo tiempo, para acceder al sistema, hay 4 tipos distintos de Usuarios (Administrador del Sistema, Encargado de Compras, Encargado de Ventas, Encargado de Producción), por ende tengo cuatro niveles de acceso al sistema. El administrador tiene el 1er nivel de acceso y a este mismo le corresponde casi el 100% de los permisos de acceso (ya sea a todos los menues y submenues del menu principal y a las operaciones que debe de realizar el administrador del sistema como abm cerrados, etc.). Luego tengo el Encargado de Compras al cual le corresponde el nivel de acceso 2 y posee los permisos solo para acceder al subsistema de Compras (o sea, dentro del menu principal solo se le habilitarían los menues o sub menues que hagan referencia a las interfaces de Compras). Y así con todos los tipos de Usuarios.

    Entonces mi pregunta final y concreta sera: ¿Como hago para controlar el ingreso de un usuario y dependiendo de su nivel de acceso, habilitar o deshabilitar las opciones del menú principal del sistema?

    Siendo que en mi base de datos (SQL Server 2008) tengo las tablas:

    Usuario: (UsuarioID [int], NivelAccesoID [int], Nombre [varchar(8)], Password[varchar(12)])
    NivelAcceso: (NivelAccesoID [int], Cargo [varchar (50)])

    Siendo que UsuarioID y NivelAccesoID son campos con Clave Principal, autonuméricos (y no permiten valores nulos como los demás campos...)

    En la parte donde hago el Login de Usuarios (frmLogin) tengo:

    NombreTextBox
    PasswordTextBox
    btnIniciarSesion

    Entonces en primer lugar, voy a validar los strings que contienen las cajas de texto contra los strings de mi base de datos, la parte de mi código sería así:

     

    Private Sub btnIniciarSesion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click

     

    Dim conection As New SqlClient.SqlConnection

     

    Dim comando As New SqlClient.SqlCommand

     

    Dim adaptador As New SqlClient.SqlDataAdapter

     

    Dim dataset As New DataSet

    conection.ConnectionString = (

    "Data Source=.;Initial Catalog=Sal_Y_Luz_DB;Integrated Security=True")

    comando.CommandText =

    "SELECT * FROM Usuario WHERE Nombre ='" & Me.NombreTextBox.Text & "'AND Password='" & Me.PasswordTextBox.Text & "';"

    conection.Open()

    comando.Connection = conection

    adaptador.SelectCommand = comando

    adaptador.Fill(dataset,

    "Usuario")

     

    Dim count = dataset.Tables("Usuario").Rows.Count

     

    If count > 0 Then

     



    Else

    MsgBox(

    "Login incorrecto, por favor chequee su nombre de usuario y/o contrasea", MsgBoxStyle.Critical, "Error")

    UsernameTextBox.Text =

    ""

    PasswordTextBox.Text =

    ""

     

    End If

     

    End Sub

    Entonces de esta manera ya me puedo logear validando los strings, pero cómo le hago para seleccionar el NivelAccesoID y por ejemplo con un Select Case ir por cada Cargo y deshabilitar los menus y por ejemplo llevar el nombre del encargado que se logeo al menu principal?

    Desde ya muchísimas gracias!

    lunes, 28 de diciembre de 2009 20:50

Todas las respuestas

  • hola

    respond en el otro foro

    http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/962fb921-037d-4bdf-a2b1-54c4b5f4b446

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 29 de diciembre de 2009 0:54
  • un consejo fuera del tema, deberias mejorar o en todo caso validar entradas solor por seguridad
    ;)
    Serg
    miércoles, 6 de enero de 2010 21:42
  • Si, gracias SERGUIMANT, ya había hecho todas las validaciones posibles para el ingreso de los usuarios, solo puse parte del código fuente donde hago el acceso. De todas maneras ya solucioné el problema. Muchas gracias a todos!
    jueves, 7 de enero de 2010 5:29
  • :-)
    Hola Carlos,

    Un consejo: Antes de nada, decirte que Microsoft dispone de su propio sistema de usuarios / roles llamado MemberShip, inicialmente creado para ASP.NET pero fácilmente adaptable a WinForms. Sería mucho más sencillo y seguro aprovechar este sistema que diseñar tu propia tabla de usuarios.

    Por ejemplo: No se si te suena el término SQL injection, pero tu código es bastante inseguro:

    En el campo del usuario prueba a teclear: 'or '1'='1 --

    Que es lo que sucede? Que como concatenas una sentencia SQL con el valor del campo estás dejando que cualquier usuario malintencionado entre en tu sistema. El resultado es este:

    SELECT * FROM Usuario WHERE Nombre =''or '1'='1' -- 'AND Password= ''

    Con lo que te pueden entrar hastra la cocina... :-(
    Por no hablar de si habilitan procedimiendos almacenados de sistema o les da por hacer un DROP TABLE...

    Dale una ojeada a las consultas parametrizadas mediante SqlParameter:
    http://msdn.microsoft.com/es-es/library/system.data.sqlclient.sqlparameter(VS.80).aspx 

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    jueves, 7 de enero de 2010 15:37
    Moderador