Hola foreros.
Una manera que a mi me resulto bastante efectiva para controlar el acceso de los usuarios a mis sistemas, es la de generar en la base de datos una tabla de registro de usuarios (llamada en este ejemplo
Usuarios), que constara de los siguientes campos:
TABLA Usuarios
Usuario (string 16)
Contraseña (string 20, encriptada)
Nivel (numerico entero, conteniendo niveles de 0 a 99 por ejemplo)
En otra tabla (en mi caso la llamo "
Menues") definimos dos campos,
NombreMenu y
NivelRequerido, donde:
NombreMenu : es el nombre que le damos a cada opcion del menu en tiempo de diseño (por ejemplo :
mnuArchivo,
mnuSalir,
mnuAyuda, etc.)
NivelRequerido : es un numero que indica el nivel minimo que tiene que tener un usuario para que esa opcion del menu se habilite (enabled) o no.
Luego, al cargar el form Main (al que en tiempo de diseño le incluimos un control Adodc llamado
adoMenues, y que cargamos con los registros de la tabla "
Menues"), colocamos en el evento Load la llamada a la Sub
ActivarMenues, que transcribo a continuacion:
Public Sub ActivarMenues()
Dim stCode As String, code As Long, i As Integer
Dim el_Control As Variant, el_Menu As String
' El recordset adoMenues contiene un registro por cada opcion
' de menu. Asociado a cada opcion esta el nivel de acceso
' requerido.
With Me.adoMenues.Recordset
.MoveFirst
For i = 1 To .RecordCount ' recorro el recordset
el_Menu = .Fields("NombreMenu").Value
For Each el_Control In Me.Controls
If TypeOf el_Control Is Menu Then
If el_Control.Name = el_Menu Then
' La variable nNivel contiene el nivel de usuario guardado
' en la misma al momento del login, obtenido de la
' tabla Usuarios
If .Fields("NivelRequerido").Value <= nNivel Then
el_Control.Enabled = True
Else
el_Control.Enabled = False
End If
Exit For
End If
End If
Next
.MoveNext
Next i
End With
End Sub
Lo que hace la funcion es recorrer la tabla
Menues registro por registro, compara el nivel del usuario (que lo leemos de la tabla
Usuarios y colocamos en una variable publica al momento del login), y si el nivel del usuario es mayor o igual que el nivel requerido para esa opcion, modificamos la propiedad Enabled de la misma en
true, de lo contrario (si es menor el nivel del usuario que el requerido) le asignamos el valor
false.
De esta manera, para realizar cualquier modificacion de permisos de usuario bastara con modificar la tabla
Menues o el permiso en si de cada usuario
desde fuera del sistema, sin tocar ni una sola linea de codigo del mismo.
Tambien podemos poner una opcion en el sistema que sea solo accesible para el administrador del mismo, donde en un grid manejamos la tabla
Usuarios para dar de alta nuevos usuarios, definir permisos de los mismos, etc. desde dentro del sistema. Esto queda mucho mejor y mas profesional que hacerlo desde fuera (accediendo a la tabla desde Access).
Espero les sea de utilidad. Cualquier pregunta no duden en postearme un mensaje personal.
Salu2 a to2
Edited by: edwinmoses