Avatar billede mlhave Nybegynder
01. oktober 2004 - 10:44 Der er 21 kommentarer og
1 løsning

Begrænse hvem der må åbne en form

Kan man, evt. ved at bruge Hændelsen VedÅbning, sikre at det kun er de brugere der er i en bestemt tabel, der kan åbne formen?

Fx. en tabel med to felter; AdminNr og Admin

I VedÅbning på formen skal der være en forespørgsel der kigger efter om Currentuser() står i tabellen.
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 10:46 #1
Kan man godt:

- Hvis du åbner formularen ved et klik på en knap, kan du kontrollere for autorisation inden du åbner formularen.
Avatar billede mlhave Nybegynder
01. oktober 2004 - 10:50 #2
Ok, men hvad skal jeg skrive i koden for at få den til at kigge i tabellen og afvise dem der ikke er der?
Avatar billede jensen363 Forsker
01. oktober 2004 - 10:52 #3
Benytter du funktionen :

Environ("UserName")

til identifikation af CurrentUser ?
Avatar billede mlhave Nybegynder
01. oktober 2004 - 10:53 #4
Nej jeg bruger Currentuser()
Avatar billede jensen363 Forsker
01. oktober 2004 - 10:54 #5
Eksempel :

Function User()

If Environ("UserName") = "OSE" Or Environ("UserName") = "R1T" Or Environ("UserName") = "U7G" Then
   
ÅbnFormular

Else
    MsgBox ("Sorry .... du er ikke godkendt !!!!")
End If
Avatar billede mlhave Nybegynder
01. oktober 2004 - 10:56 #6
Det er ikke præcist nok, det er der mit problem er. Jeg kunne godt finde ud af at skrive den kode, men jeg vil have den til at kigge i en tabel og kun dem der står i tabellen må åbne formularen....det kan jeg ikke lige gennemskue...
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 11:01 #7
Jeg har et eksempel der bruger DAO 3.6 - kan jeg godt finde frem... Skal jeg det ?
Avatar billede mlhave Nybegynder
01. oktober 2004 - 11:02 #8
Det vil være kanon!
Avatar billede jensen363 Forsker
01. oktober 2004 - 11:04 #9
Hvis du benytter Currentuser(), var det vel en ide, et implementere Sikkerhed på brugerniveau ... eller hvad ?
Avatar billede mlhave Nybegynder
01. oktober 2004 - 11:08 #10
Tjaaa, det er også mit udgangspunkt, men jeg kan ikke hitte ud af at forhindre en bruger i at åbne en form - jeg kan kun finde ud af at forhindre dem i at redigere i tabellerne....
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 11:10 #11
Denne kode slår op i et recordset og laver et array..:

Dim db As Database, rs As Recordset, strSQL As String
Dim Counter As Long

Set db = CurrentDb
strSQL = "SELECT * FROM FORESP_NAVN WHERE POST_I_FORESP=" & BRUGER_DU_VIL_MÅLE_PÅ & ";"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

If rs.BOF or rs.EOF then
'Bruger har ikke adgang
else
'bruger har adgang
end if

rs.close

set rs=nothing
Set db = Nothing


Husk at tilføje DAO 3.6 til referencer.
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 11:11 #12
Og glem linien om, at koden laver et array - det gør den ikke (Gør den oprindeligt)...
Avatar billede jensen363 Forsker
01. oktober 2004 - 11:36 #13
Alternativt ( til inspiration ), men ikke så sikkert :

Private Sub Form_Load()
Dim CurrentUserName As String
   
    CurrentUserName = DLookup("[Bruger]", "tblUsers", "[BrugerID] = CurrentUser")
   
    MsgBox ("Aktuel bruger er : ") & CurrentUserName

  If CurrentUser = DLookup("[BrugerID]", "qryUsers", "[BrugerID] = CurrentUser") Then
   
    cmdKundedata.Enabled = True
    cmdDataImport.Enabled = True
    cdmRapporteringsår.Enabled = True
    cmdProdukter.Enabled = True
    cmdSælger.Enabled = True
       
    Else
   
    cmdKundedata.Enabled = False
    cmdDataImport.Enabled = False
    cdmRapporteringsår.Enabled = False
    cmdProdukter.Enabled = False
    cmdSælger.Enabled = False
   
    End If

End Sub

Kombineret med sikkerhed på brugerniveau, kan du forhindre at brugeren i overhovedet at komme i designmode
Avatar billede mlhave Nybegynder
01. oktober 2004 - 11:42 #14
>madschristensen
Jeg har prøvet at lave din kode som ADODB - mest fordi det sad jeg allerede og roede med da du kom men din løsning - jeg har så lavet en kombi af det jeg sad med og dit, men jeg kan ikke få linien der starter med rs.Open til at virke ordentligt - kan du gennemskue den? Læg også lige et svar så du kan få nogle point :o)

Public Function FindAdmin(Initialer As String)
    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim SQLStr As String
   
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset

    SQLStr = "SELECT * FROM tblAdmin where Administrator=" & CurrentUser
   
    rs.Open SQLStr, cn
    'Gl. sætning: rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
   
    If rs.BOF Or rs.EOF Then
        MsgBox "ingen adgang"
        DoCmd.CancelEvent
    Else
        MsgBox "Adgang"
    End If
   
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 11:47 #15
Gør jeg da gerne...

Men hvis vi snakker sikkerhed...Hvis du sidder på et AD eller WinNT miljø, kan du også lave kode der kontrollerer for medlemskab af bestemte grupper. Så kan du styre hvem der har adgang til hvad i din DB ved hjælp af deres medlemskaber af Windows-Logon brugergrupper.

Jeg laver nok snart en artikel om emnet ;O))
Avatar billede mlhave Nybegynder
01. oktober 2004 - 11:48 #16
Kunne du gennemskue rs.open, hvad der mangler?
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 11:56 #17
Hvad mener du med at den ikke virker ordentligt? Fejler den eller?
Avatar billede mlhave Nybegynder
01. oktober 2004 - 12:00 #18
Når jeg afvikler funktionen stopper den ved "rs.Open SQLStr, cn" og hævder der er for mange eller for få parametre...?
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 12:04 #19
prøv lige rs.open (SQLStr, cn)

eller:

With rs
    .ActiveConnection = cn
    .Source = SQLStr
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open
End With
Avatar billede mlhave Nybegynder
01. oktober 2004 - 12:07 #20
Nej det vil ikke rigtigt - jeg har prøvet med:

With rs
    .ActiveConnection = cn
    .Source = SQLStr
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open
End With

...men så stopper den ved: If rs.BOF Or rs.EOF Then

Du skal ikke gøre mere - jeg åbner et nyt spørgsmål senere :o)
Avatar billede madschristensen Nybegynder
01. oktober 2004 - 12:15 #21
I din funktion kræver du et parameter (initialer). Men i den SQL spørger du på CurrentUser ?

Hvem skal du måle på?
01. oktober 2004 - 23:07 #22
Jeg har et eksempel liggende her: http://www.makeiteasy.dk/eksempler/Downloads.htm

Det hedder noget med "Bruger-login"

Det kan måske også give ldt inspiration?
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