Aggiungere livelli d'accesso al database

di il
11 risposte

Aggiungere livelli d'accesso al database

Salve a tutti voi, vorrei incrementare i livelli d'accesso di questo DB che per ora è solo Admin e User, mentre io vorrei dare anche Guest o Other.

Ho provato a modificare la macro aggiungendo i livelli (che ho già modificati della tabella dove ci sono admin e user) ma ricevo una sfliza di errori else e end if……Che si debba utilizzare altre funzioni? Cosi come è impostata la macro va bene solo per due livelli d'accesso??

Grazie in anticipo per chi risponderà.

cassiopea

Option Compare Database

Private Sub Comando1_Click()
Dim UserLevel As Integer
Dim pwd As String
Dim TemPass As String
Dim ID As Integer
If IsNull(Me.txtLoginID) Then
MsgBox ("Inserire Login"), vbInformation, "Richiesto Login"
Me.txtLoginID.SetFocus
ElseIf IsNull(Me.txtPassword) Then
MsgBox ("Inserire Password"), vbInformation, "Richiesta Password"
Me.txtPassword.SetFocus
Else
If estrai_campo_numerico("select count(*) from tablogin where login='" & txtLoginID.Value & "'") Then
 'esiste l'utente
 pwd = estrai_campo_stringa("select password from tablogin where login='" & txtLoginID.Value & "'")
 If pwd = "Password" Then
  'sono entrato con la password momentanea
   If pwd <> txtPassword.Value Then
    MsgBox "Attenzione la Password momentanea non coincide"
    txtPassword.Value = ""
    txtPassword.SetFocus
    Exit Sub
   End If
   id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
   MsgBox ("Per favore cambiare Password"), vbInformation, "Nuova Password"
   DoCmd.OpenForm "CambiaPassword", , , "[LoginID] = " & ID
   DoCmd.Close acForm, "LoginPassword"
 Else
  If txtPassword.Value = pwd Then
   'password corretta
   UserLevel = estrai_campo_stringa("select sicurezza from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
   id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
   If UserLevel = 1 Then
    DoCmd.OpenForm "InserimentoDati"
    DoCmd.Close acForm, "LoginPassword"
   Else
    DoCmd.OpenForm "Report"
    DoCmd.Close acForm, "LoginPassword"
  End If


  'QUI VORREI AGGIUNGERE QUESTE LIVELLO D'ACCESSO E MAGARI ANCHE IL NUMERO 3
    'If
  'UserLevel = 2 Then
    'DoCmd.OpenForm "InserimentoDati"
    'DoCmd.Close acForm, "LoginPassword"

     
 Else
   MsgBox "Attenzione Password Errata"
   txtPassword.Value = ""
   txtPassword.SetFocus
   Exit Sub
  End If
 End If
Else
 MsgBox "Attenzione utente non codificato"
 txtLoginID.Value = ""
 txtLoginID.SetFocus
 Exit Sub
End If
End If

End Sub

11 Risposte

  • Re: Aggiungere livelli d'accesso al database

    16/12/2023 - Cassiopea ha scritto:


    modificare la macro

    La macro? che gran brutta parola. Con quella non vai da nessuna parte. Parli degli utenti come gestiti fino ad Access 2003 con il file mdw? Se è quello (mai usato, magari dal resto del codice si capisce) scòrdatelo. Già il concetto “livelli di accesso al database” è un concetto impegnativo per Access. 

    Comunque se non metti il codice (VBA, non macro) tra gli appositi tag e non lo indenti è illeggibile. Faccio io, per questa volta

    Private Sub Comando1_Click()
        Dim UserLevel As Integer
        Dim pwd As String
        Dim TemPass As String
        Dim ID As Integer
        If IsNull(Me.txtLoginID) Then
            MsgBox ("Inserire Login"), vbInformation, "Richiesto Login"
            Me.txtLoginID.SetFocus
        ElseIf IsNull(Me.txtPassword) Then
            MsgBox ("Inserire Password"), vbInformation, "Richiesta Password"
            Me.txtPassword.SetFocus
        Else
            If estrai_campo_numerico("select count(*) from tablogin where login='" & txtLoginID.Value & "'") Then
                'esiste l'utente
                pwd = estrai_campo_stringa("select password from tablogin where login='" & txtLoginID.Value & "'")
                If pwd = "Password" Then
                    'sono entrato con la password momentanea
                    If pwd <> txtPassword.Value Then
                        MsgBox "Attenzione la Password momentanea non coincide"
                        txtPassword.Value = ""
                        txtPassword.SetFocus
                        Exit Sub
                    End If
                    id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
                    MsgBox ("Per favore cambiare Password"), vbInformation, "Nuova Password"
                    DoCmd.OpenForm "CambiaPassword", , , "[LoginID] = " & ID
                    DoCmd.Close acForm, "LoginPassword"
                Else
                    If txtPassword.Value = pwd Then
                        'password corretta
                        UserLevel = estrai_campo_stringa("select sicurezza from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
                        id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
                        If UserLevel = 1 Then
                            DoCmd.OpenForm "InserimentoDati"
                            DoCmd.Close acForm, "LoginPassword"
                        Else
                            DoCmd.OpenForm "Report"
                            DoCmd.Close acForm, "LoginPassword"
                        End If
    
    
                        'QUI VORREI AGGIUNGERE QUESTE LIVELLO D'ACCESSO E MAGARI ANCHE IL NUMERO 3
                        'If
                        'UserLevel = 2 Then
                        'DoCmd.OpenForm "InserimentoDati"
                        'DoCmd.Close acForm, "LoginPassword"
    
    
                    Else
                        MsgBox "Attenzione Password Errata"
                        txtPassword.Value = ""
                        txtPassword.SetFocus
                        Exit Sub
                    End If
                End If
            Else
                MsgBox "Attenzione utente non codificato"
                txtLoginID.Value = ""
                txtLoginID.SetFocus
                Exit Sub
            End If
        End If
    
    End Sub

    Hai delle strutture If Then Else infinite, magari si possono studiare meglio o inserire alcune porzioni di codice in funzioni/sub.

  • Re: Aggiungere livelli d'accesso al database

    17/12/2023 - Philcattivocarattere ha scritto:


    Hai delle strutture If Then Else infinite, magari si possono studiare meglio o inserire alcune porzioni di codice in funzioni/sub.

    Ciao e grazie. Quindi mi confermi che questo listato va bene solo per due livelli ?

  • Re: Aggiungere livelli d'accesso al database

    Questo codice e modo di operare per autorizzare operazioni e gestire utenze è, a dir poco, cervellotico e sicuramente inutile.

    Se hai queste esigenze usa SQL Server e la sua gestione delle utenze e permessi. Se non lo conosci mi pare evidente che è necessario studiarlo e adottarlo.

  • Re: Aggiungere livelli d'accesso al database

    Al componente testo del login sull'evento keypress:

    If ( key=invio and  not (IsNull(Me.txtLoginID))) Then       

             Me.txtLoginID.SetFocus 

    If ( key=invio and  IsNull(Me.txtLoginID)) Then     

              MsgBox ("Inserire Login"), vbInformation, “Richiesto Login”

    Idem per password

    Così dedichi il codice al solo login evitando if on if…

  • Re: Aggiungere livelli d'accesso al database

    17/12/2023 - Cassiopea ha scritto:


    questo listato va bene solo per due livelli ?

    Da quel codice non è che si capisca granché quanto a “livelli”, in teoria potresti farne quanti ne vuoi. Tutto però cozza con quanto, senza mezze misure o indoramenti di pillola (come avevo fatto io nella prima risposta), ha scritto Oregon:

    17/12/2023 - oregon ha scritto:

    Questo codice e modo di operare per autorizzare operazioni e gestire utenze è, a dir poco, cervellotico e sicuramente inutile.

    Se hai queste esigenze usa SQL Server e la sua gestione delle utenze e permessi.

    E' inutile girarci attorno, è così. (giusto per chiarezza: io non lo so fare)

  • Re: Aggiungere livelli d'accesso al database

    Comunque l'argomento è stato trattato.

  • Re: Aggiungere livelli d'accesso al database

    17/12/2023 - sihsandrea ha scritto:


    l'argomento è stato trattato.

    Frase che può essere replicata nel 99,95% dei thread della sezione Access.

    Cosa intedevi dire? 

    Che la stessa risposta la trova anche in altri thread? Almeno c'è coerenza. 

    Che qualcosa si può fare? Riporta qualche link, poi Cassiopea (OP lo chiamano nei forum scritti in inglese) farà le sue valutazioni se quello che trova corrisponde al suo concetto di “livelli d'accesso”. Figurarsi se non si trovano esempi anche già pronti (uno fra tutti di @Alex ma chissà se è ancora reperibile sul web) per introdurre forme di limitazione in base all'utente. Di sicuro non è in quel codice che si fa tutto, chiamando l'utente Admin, User, Guest, Other, SuperUser o LessThanNormalUser.

  • Re: Aggiungere livelli d'accesso al database

    Https://www.iprogrammatori.it/forum-programmazione/access/limitare-visualizzazione-dati-tabella-in-base-ad-utente-loggato-t52273.html

  • Re: Aggiungere livelli d'accesso al database

    17/12/2023 - Philcattivocarattere ha scritto:

    Figurarsi se non si trovano esempi anche già pronti (uno fra tutti di @Alex ma chissà se è ancora reperibile sul web) per introdurre forme di limitazione in base all'utente. 

    Si ho almeno 2 demo, ma sono troppo complicati da proporre… servono nozioni più solide.

  • Re: Aggiungere livelli d'accesso al database

    Eccomi qua, scusate ma il lavoro ed una super influenza mi hanno messo fuori rete per un pò….Ho letto con attenzione i vostri commenti e poi la discussione indicata da Shisandrea ma in onestà non ho trovato coincidenze con il mio quesito. Il database che vorrei creare è abbastanza semplice. per esempio ci sono delle tabelle dove ci sono dati anagrafici di operatori e tabelle con automezzi e tabelle con servizi da svolgere. 

    L'accesso diverso consisterebbe nel dare la possibilità di vedere:  solo gli operatori, solo gli automezzi e solo i servizi…Quindi quello Admin che gestisce gli accessi e vede tutto sono già a quattro livelli. Tutto il discorso della sicurezza dei dati posso trascurarlo in quanto si tratta di mere attività lavorative senza dati sensibili…..

    17/12/2023 - @Alex ha scritto:


    Si ho almeno 2 demo, ma sono troppo complicati da proporre… servono nozioni più solide.

    @Alex non ho capito bene tu avresti qualche esempio pratico da farmi vedere?

    Grazie Cassioepa

    Buon Natale a tutti….

  • Re: Aggiungere livelli d'accesso al database

    Ho realizzato un paio di demo per la gestione dei livelli ma non sono adatti per te come da tua stessa ammissione anche nell'altro 3d.

    Solitamente i miei demo usano codice non usuale allo sviluppo classico basilare VBA, lo definisco impropriamente  “avanzato”, per questo non li propongo.

    Segui i suggerimenti già ricevuti.

Devi accedere o registrarti per scrivere nel forum
11 risposte