Avatar billede dennisa Nybegynder
07. februar 2008 - 13:34 Der er 16 kommentarer og
1 løsning

Sikkerhed på formniveau

På Thomas Jepsens hjemmeside, har jeg hentet følgende databaseeksempel : LoginDB.mdb

I forhold til de muligheder den giver mig for adgang til formulerer, savner jeg en mulighed for helt at udelukke en brugergruppe adgang til en given formular.

Se nedenstående :

Option Compare Database
Option Explicit

'***********************************************************************************************
'  Denne kode er udviklet af Thomas Jepsen, 2000
'  Dele eller hele koden må frit benyttes i applikationer, så længe kildeangivelse er bevaret
'  Besøg www.makeiteasy.dk eller skriv til tj@makeiteasy.dk,
'  hvis der opstår fejl eller spørgsmål, eller du har brug for yderligere assistance
'***********************************************************************************************

Public Username As String
Public SecurityLevel As Levels

Public Enum Levels
    SecReadOnly = 1
    secuser = 2
    secadmin = 3
End Enum

Public Function SetPermissions(F As Form) As Boolean
    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    On Error Resume Next
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    rs.Open "Select * From appSecurity_Permissions Where Formname = '" & F.Name & "' And SecurityLevel = " & SecurityLevel, cn, adOpenStatic
    If rs.EOF Then
        SetPermissions = False
        F.AllowAdditions = False
        F.AllowDeletions = False
        F.AllowEdits = False
        Exit Function
    End If
    Select Case rs!Permission
        Case 0 'Nothing
            F.AllowAdditions = False
            F.AllowDeletions = False
            F.AllowEdits = False
        Case 2 'Add
            F.AllowAdditions = True
            F.AllowDeletions = False
            F.AllowEdits = False
        Case 4 'Delete
            F.AllowAdditions = False
            F.AllowDeletions = True
            F.AllowEdits = False
        Case 6 'Add+Delete
            F.AllowAdditions = True
            F.AllowDeletions = True
            F.AllowEdits = False
        Case 8 'Edit
            F.AllowAdditions = False
            F.AllowDeletions = False
            F.AllowEdits = True
        Case 10 'Edit+Add
            F.AllowAdditions = True
            F.AllowDeletions = False
            F.AllowEdits = True
        Case 12 'Edit+Delete
            F.AllowAdditions = False
            F.AllowDeletions = True
            F.AllowEdits = True
        Case 14 'Everything
            F.AllowAdditions = True
            F.AllowDeletions = True
            F.AllowEdits = True
        Case 99 'No Access
            MsgBox ("You do not have permission to view this function.")
           
    End Select
    SetPermissions = True
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function

De enkelte formularer opnår der adgang til via hovedmenuen, og jeg vil gerne at brugeren får meddelelse om at der ikke er adgang til funktionen, og returnerer denne til hovedmenuen igen.

Det er det formål jeg har tiltænkt som Case 99 !!!!

Men hvordan afsluttes koden.
Avatar billede mugs Novice
07. februar 2008 - 13:51 #1
exit sub
Avatar billede mugs Novice
07. februar 2008 - 13:51 #2
Det er jo en function:

Exit Function
Avatar billede dennisa Nybegynder
07. februar 2008 - 13:54 #3
Bare det var så let, men uanset hvad så fortsættes åbningen af formen ( øv )
Avatar billede Slettet bruger
07. februar 2008 - 13:56 #4
if f="NavnPåDinMenu" then
f.NavnPåDinKnap.enabled = false
end if
Avatar billede Slettet bruger
07. februar 2008 - 13:59 #5
Case 99 'No Access
F.AllowAdditions = False
F.AllowDeletions = False
F.AllowEdits = False
if f="NavnPåDinMenuFormular" then
f.NavnPåDinKnap.enabled = false
end if

Ville så (regner jeg med) gøre at knappen, som skal åbne formularen, ikke er aktiv!~)
Avatar billede dennisa Nybegynder
07. februar 2008 - 14:06 #6
Funktionaliteten er :

Fra en funktionsknap ( OnClick ) udføres følgende :

Private Sub Command409_Click()

    Dim stDocName As String
    Dim stLinkCriteria As String
   
    stDocName = "frmData_100"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

End Sub

Selve formen indeholder ( OnLoad ) denne :  =SetPermissions([Form])

Det er vist denne som benytter Case funktionaliteten.

Case 99 identificeres korrekt, og fejlmedddelelsen vises, men alligevel åbnes foeman
Avatar billede terry Ekspert
07. februar 2008 - 14:07 #7
I wouldnt bother using this code for this, but if you want to you could try.

altering these lines, and I'll add that this isnt tested.

        Case 99 'No Access
            MsgBox ("You do not have permission to view this function.")
            SetPermissions = False
            GoTo Exit_Function         
           
    End Select

    SetPermissions = True

Exit_Function:

    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function


Now move the =SetPermissions([Form]) from the On LOad event and put it in code in the OnOPen event


Something like this

IF SetPermissions([Form]) = False Then
Cancel = True
end if
Avatar billede terry Ekspert
07. februar 2008 - 14:07 #8
.
Avatar billede dennisa Nybegynder
07. februar 2008 - 14:08 #9
Hej spg >

Jeg har jo allerede trykket på finktionsknappen der skal åbne formularen ???
Avatar billede dennisa Nybegynder
07. februar 2008 - 14:36 #10
Thanks terry
Avatar billede terry Ekspert
07. februar 2008 - 14:42 #11
Your welcome. I assume it works?


Another idea was to disable the button which opens the form on the "Hoved Menu" with something like this in the forms (hovedmenu) on open event

IF DlookUp("Permission", "appSecurity_Permissions", "FormName = '" & Me.Name & "' AND SecurityLevel = " & SecurityLevel) = 99 Then

        'Disable button
Else
    'Enable button

End IF
Avatar billede dennisa Nybegynder
07. februar 2008 - 14:50 #12
Yes, it works perfectly
Avatar billede dennisa Nybegynder
07. februar 2008 - 14:53 #13
Is it possible to skip the message "The OpenForm action was canceled" ?
Avatar billede terry Ekspert
07. februar 2008 - 14:55 #14
Yes, just remove the line if code with

msgbox(...
Avatar billede dennisa Nybegynder
07. februar 2008 - 14:58 #15
Where is this MsgBox code placed ?
Avatar billede terry Ekspert
07. februar 2008 - 15:02 #16
Ah! silly me :o)


I think you can change the code which opens the form


Private Sub Command409_Click()

On Error Resume Next '<<<<<<<<<<<<<< Quick and dirty

    Dim stDocName As String
    Dim stLinkCriteria As String
   
    stDocName = "frmData_100"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

End Sub
Avatar billede dennisa Nybegynder
07. februar 2008 - 15:07 #17
Why make it more complicated :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester