Cuentas de usuario

Hola quisiera me ayudaran lo que pasa es que estoy haciendo un sistema de control de empleados y quiero hacer cuentas de usuario y que dependiendo de la cuenta tenga restricciones por ejemplo el administrador tenga derecho a todo un supervisor solo a algunas opciones como podría ser consultas altas guardar algo así espero me pudieran decir como hacerlo o alguna idea por favor

1 Respuesta

Respuesta
1
El tema de seguridad de Access se podría decir que es casi infinito y lo que expones en tu pregunta deja muchas cuestiones sin tratar, ¿cómo por ejemplo tu archivo es único?, lo utilizan varios usuarios, ¿pero en varios equipos? ,.... etc., etc., etc.
Te puedo decir también, que Access incorpora una serie de herramientas de seguridad encaminadas a la gestión de usuarios y permisos que puedes utilizar, aunque antes deberías comprobar las ventajas y los inconvenientes de usarlas. En la ventana de Access, abre el menu "Herramientas" y veras "Seguridad"
Gracias por tu respuesta pues la verdad si pienso ponerla en red no entendí muy bien eso de que si mi archivo es único ahorita he estado intentando hacer las cuentas programandolas ya cheque eso de herramientas y seguridad pero soy honesto no le entendí mucho
este es el código que he estado realizando :
Dim busqueda As String
Option Compare Database
Public LoginSucceeded As Boolean
Private Sub aceptar_Click()
Dim buscar As String
'comprobar si la contraseña es correcta
busqueda = nick
buscar = "select * from usuarios where nick='" & busqueda & "'"
If Texto2 = nick & Texto4 = contraseña Then
'colocar código aquí para pasar al sub
        'que llama si la contraseña es correcta
'lo más fácil es establecer una variable global
        LoginSucceeded = True
        usuarios.Recordset.AddNew
        nombres.Text = Texto2
        fecha.Text = Date
        h_inicio.Text = Time
        Me.RecordSource = buscar
On Error GoTo Err_aceptar_Click
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "formmenu"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_aceptar_Click:
    Exit Sub
Err_aceptar_Click:
    MsgBox Err.Description
    Resume Exit_aceptar_Click
Else
        MsgBox "nick o contraseña no válida. Vuelva a intentarlo", , "Inicio de sesión"
        Texto4.SetFocus
        Texto2.SetFocus
        SendKeys "{Home}+{End}"
    End If
End Sub
Private Sub cancelar_Click()
On Error GoTo Err_cancelar_Click
'establecer la variable global a false
    'para indicar un inicio de sesión fallido
    LoginSucceeded = False
    DoCmd.Quit
Exit_cancelar_Click:
    Exit Sub
Err_cancelar_Click:
    MsgBox Err.Description
    Resume Exit_cancelar_Click
End Sub
ademas agrege un modulo con el siguiente codigo:
Option Compare Database
Public alt As Boolean
Public baj As Boolean
Public cons As Boolean
Public modi As Boolean
Public inf As Boolean
Public arch As Boolean
Public act As Boolean
Al momento de introducir el nick y la contraseña me manda directo al else supongo que no esta haciendo la comparación entre los cuadros de texto
te pongo mi msn para pasarte el programa y lo puedas checar si quieres es [email protected]
Vamos a ver: te propongo lo siguiente para establecer un control de usuarios y accesos a la aplicación. ´Con ellos puedes establecer el control de usuarios registrando su accesos, caducidad de contraseñas, además se establece a 3 el número de intentos de acceso. Pruébalo y ya me contarás :
Crea una tabla "Usuarios" donde das permisos a los usuarios que quieras, con los campos siguientes:
Usuario, FechaPass, NIvel, pass, Dias Validez, Sexo, FallosIdentificacion, UltimoAcceso, UltimaHora
Crea otra tabla "RegAccesos" para guardar los accesos que se hacen a la aplicación. Con los campos siguientes: Fecha, Hora, Usuario, Equipo, Observ
Crea un formulario que se abra automáticamente al iniciar la aplicación con los campos txtUsuario, txtContraseña, una etiqueta que se llame "lblMensajes" y un botón
En el evento al salir del campo txtUsuario coloca este código:
Private Sub txtUsuario_Exit(Cancel As Integer)
If Nz(txtUsuario, "") = "" Then
   Cancel = True
End If
End Sub

En el evento Al Salir del campo txtContraseña coloca este código:
Private Sub txtContraseña_Exit(Cancel As Integer)
Dim xbusca As Variant
Dim xAcceso As Variant
Dim xFallo As Integer
Dim xFecha As Date
Static NumeroIntentos As Integer
Dim Saludo As String
Dim xDia As Integer
Dim FI As Integer
NumeroIntentos = NumeroIntentos + 1
xbusca = DLookup("[Pass]", "Usuarios", "[Pass] = '" & txtContraseña & "' and  [Usuario] ='" & txtUsuario & "'")
xFallo = DLookup("[FallosIdentificacion]", "Usuarios", "[Usuario] ='" & txtUsuario & "'")
If xFallo >= 3 Then
    ' Registrar acceso en RegAccesos
      DoCmd.SetWarnings False
      DoCmd. RunSQL "INSERT INTO RegAccesos (Fecha, Hora, Usuario, Equipo, Observ) VALUES(CDate(Date()), Time(), txtUsuario, serial,'Fallo Identif.')"
      DoCmd.SetWarnings True
     MsgBox "Violación de seguridad ROT13" & vbCrLf & "ES MUY POSIBLE QUE OTRA PERSONA LE ESTE SUPLANTANDO" & vbCrLf & "Contacte urgentemente con el administrador de la aplicación", vbCritical, "VIOLACION DE SEGURIDAD"
     DoCmd.Quit
     Else
If Nz(xbusca, "") <> txtContraseña Then
' Registrar acceso en RegAccesos
      DoCmd.SetWarnings False
      DoCmd. RunSQL "INSERT INTO RegAccesos (Fecha, Hora, Usuario, Equipo, Observ) VALUES(CDate(Date()), Time(), txtUsuario, serial,'Fallo Identif.')"
      DoCmd.SetWarnings True
   Cancel = True
   Call Error("Error", "La contraseña no es valida, intento." & NumeroIntentos, _
   "si no recuerdas tu contraseña puedes recuperarla pulsando en la opción ""Recuperar mi Contraseña."" ")
   Else
     ' Registrar acceso en RegAccesos
      DoCmd.SetWarnings False
      DoCmd. RunSQL "INSERT INTO RegAccesos (Fecha, Hora, Usuario, Equipo, Observ) VALUES(CDate(Date()), Time(), txtUsuario, serial,'Identificación CORRECTA')"
      DoCmd.SetWarnings True
     NumeroIntentos = 0
     xbusca = DLookup("[sexo]", "Usuarios", "[Usuario] ='" & txtUsuario & "'")
     If xbusca = "M" Then
        Saludo = ", bienvenida "
        Else
          Saludo = ", bienvenido "
      End If
      xbusca = DLookup("[Nivel]", "Usuarios", "[Usuario] ='" & txtUsuario & "'")
      xAcceso = DLookup("[UltimoAcceso]", "Usuarios", "[Usuario] ='" & txtUsuario & "'")
      lblMensajes.Caption = "Hola " & txtUsuario & Saludo & ". Tu nivel de acceso es " & xbusca & vbCrLf & "La última vez que abriste tu sesión fue el " & xAcceso
      ' actualizar FechaPass en la tabla
      DoCmd.SetWarnings False
      DoCmd.RunSQL "UPDATE Usuarios SET Usuarios.UltimoAcceso = CDate(Date()) " _
      & "WHERE ([Usuarios]![Usuario] = txtUsuario)"
      DoCmd.SetWarnings True
      ' actualizar Ultimahora en la tabla
      DoCmd.SetWarnings False
      DoCmd.RunSQL "UPDATE Usuarios SET Usuarios.Ultimahora = Time() " _
      & "WHERE ([Usuarios]![Usuario] = txtUsuario)"
      DoCmd.SetWarnings True
End If
xFecha = DLookup("[FechaPass]", "Usuarios", "Usuario='" & txtUsuario & "'")
xDia = DLookup("[DiasValidez]", "Usuarios", "Usuario='" & txtUsuario & "'")
FI = Date - xFecha
If FI = xDia - 6 Then
MsgBox "Su contraseña caduca en 6 días. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbCritical + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI = xDia - 5 Then
MsgBox "Su contraseña caduca en 5 días. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbCritical + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI = xDia - 4 Then
MsgBox "Su contraseña caduca en 4 días. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbCritical + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI = xDia - 3 Then
MsgBox "Su contraseña caduca en 3 días. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbCritical + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI = xDia - 2 Then
MsgBox "Su contraseña caduca en 2 días. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbCritical + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI = xDia - 1 Then
MsgBox "Su contraseña caduca mañana. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbInformation + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI = xDia Then
MsgBox "Su contraseña caduca hoy. Debe cambiarla o será eliminado como usuario de GIPv9.1", vbInformation + vbOKOnly, "AVISO DE SEGURIDAD"
Else
If FI > xDia Then
MsgBox "Ud no ha renovado su contraseña en el plazo permitido y ya no es usuario de GIPv9.1. Contacte con el administrador de su aplicación", vbInformation + vbOKOnly, "ACCESO NO PERMITIDO"
      DoCmd.RunSQL "DELETE * FROM Usuarios WHERE [Usuario] = txtUsuario"
      DoCmd.Quit
Else
If NumeroIntentos = 3 Then
DoCmd.SetWarnings False
      DoCmd.RunSQL "UPDATE Usuarios SET Usuarios.FallosIdentificacion = Usuarios.FallosIdentificacion + 1 " _
      & "WHERE ([Usuarios]![Usuario] = txtUsuario)"
      DoCmd.SetWarnings True
DoCmd.Quit
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub

En el evento Al Hacer clic del botón escribe el código necesario para abrir luego el formulario, acción, macro, etc., que desees, por ejemplo:
Dim stDocName As String
    stDocName = "cierrePrincipalEntrada1"
    DoCmd. RunMacro stDocName
Hola otra vez te agradezco la ayuda que me estas brindando, puse todo como me dijiste solo que al momento de introducir el nombre de usuario y después pasarme al cuadro de contraseña me dice que me marca un error me dice: La expresión 'Al salir' que introdujo como valor de la propiedad de evento produjo un error: el numero de argumentos es incorrecto o la asignación de propiedad no es valida.
*la expresion no da como resultado el nombre de un macro, de una funcion definida por el usuario o [procedimiento de evento]
*hubo un error al evaluar una funcion, evento o macro.
Ayer estuve trabajando con el código que te enseñe y ya puedo hacer que entre checando el usuario y la contraseña pero no puedo hacer que a la hora de entrar dependiendo del usuario que entre deshabilite los botones dependiendo de los permisos que tenga
te mando lo que he hecho por cualquier cosa
Dim busqueda As String
Option Compare Database
Public LoginSucceeded As Boolean
Private Sub aceptar_Click()
Dim buscar As String
'comprobar si la contraseña es correcta
busqueda = Texto1
Me.RecordSource = "select * from usuarios where nick='" & busqueda & "'"
If Texto1 = nick Then
If Texto2 = contraseña Then
    alt = Me.alt.Value
    baj = Me.baj.Value
    cons = Me.cons.Value
    modi = Me.modi.Value
'colocar código aquí para pasar al sub
        'que llama si la contraseña es correcta
'lo más fácil es establecer una variable global
        LoginSucceeded = True
        Me.RecordSource = buscar
On Error GoTo Err_aceptar_Click
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "formmenu"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_aceptar_Click:
    Exit Sub
Err_aceptar_Click:
    MsgBox Err.Description
    Resume Exit_aceptar_Click
Else
        MsgBox "contraseña no válida. Vuelva a intentarlo", , "Inicio de sesión"
        Texto2.SetFocus
    End If
Else
        MsgBox "nick no valido. Vuelva a intentarlo", , "Inicio de sesion"
        Texto1.SetFocus
    End If
End Sub
Private Sub cancelar_Click()
On Error GoTo Err_cancelar_Click
 'establecer la variable global a false
    'para indicar un inicio de sesión fallido
    LoginSucceeded = False
    DoCmd.Quit
Exit_cancelar_Click:
    Exit Sub
Err_cancelar_Click:
    MsgBox Err.Description
    Resume Exit_cancelar_Click
End Sub
En la tabla "Usuarios" debes introducir al menos uno, es decir, debe contener al menos un registro. Y lo siento pero se me escapoó un error y es el siguiente:
El campo del formulario denominado txtUsuario es un cuadrocombinado con origen en la tabla Usuarios. Por lo tanto cambialo a CuadroCombinado.
A parte de esto, también dará error, si escribes el código para el botón tal y como lo he puesto y lo dejas así, ya que la macro a la que hace referencia el código ("cierrePrincipalEntrada1"), todavía no existe.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas