Avatar billede kongsteddk Nybegynder
20. april 2006 - 14:09 Der er 11 kommentarer og
2 løsninger

Rettigheder vha mdw

Hej.

Jeg sidder med et lille problem.

Jeg har en database, som skal bruges af flere afdelinger til at læse og skrive i.
Mit problem er at den enkelte bruger KUN må skrive oplysninger ind for din egen afdeling (man vælger afdeling under oprettelsen af en ny post), og må ligeledes kun redigere eksisterende poster for egen afdeling. Det skal være muligt at se oplysninger for de øvrige afdelinger.

Håber at det gav mening.

Nogen gode løsningsforslag?

//Anders
Avatar billede ffsoft Praktikant
20. april 2006 - 14:24 #1
Når brugeren er logget ind lægger du brugerens afdeling i en
global variabel. I tabellen står hvilken afdeling den enkelte
post tilhører.

Så kan du skrive

if globalAfdeling = tabelAfdeling then
Me.AllowEdits = True
else
Me.AllowEdits = false
end if

Ved oprettelse af en post skal du sætte afdeling i et
ikke skrivebart felt på formularen.
Avatar billede Slettet bruger
20. april 2006 - 15:19 #2
Den bruger som er logget ind brug hans afdeling, som kriterie for forespørgslen og lås afdelingsfeltet og brug hans afdeling som standardværdi. Herudover så laver du en visningsudgave af formularen, som er låst, men som viser data for alle afdelinger!~)
Avatar billede kongsteddk Nybegynder
20. april 2006 - 15:22 #3
Nu er det mig at det er galt med, men hvor sættes det ind????

Brugerne er oprettet i en .mdw-fil hvor de forskellige afdelinger også er oprettet. Hvordan er det lige at jeg kæder det sammen med den tabel hvori de afdelinger er oprettet?
Jeg kan også godt leve med at afdelingsnavnet skal være arbejdsgruppen, men hvor trækker jeg det navn ud i en session?

//Anders
Avatar billede terry Ekspert
20. april 2006 - 15:27 #4
As fars as I know, you cant use Access security at record level. For each record you create in the tables you will need to have a field containing afdeling. Then you will need to check (in code) that the current user has the correct permissions to alter the record (same afdeleing).
Avatar billede terry Ekspert
20. april 2006 - 15:28 #5
and that was an answer
Avatar billede terry Ekspert
20. april 2006 - 15:38 #6
You can use similar code as ffsoft gives and it would be a good idea to do this in the On Current Event
Avatar billede kongsteddk Nybegynder
25. april 2006 - 20:06 #7
Jeg har forsat lidt problemer. Ud fra ovenstående eksempel, bliver brugeren der hentet ud fra en MDW-fil eller? Hvordan får jeg kædet tabellen med afdelingerne sammen med brugeren som er logget ind. Den enkelte bruger er medlem af en brugergruppe, som har samme navn som afdelignen.
Kan jeg ikke trække på det navn på en eller anden måde?

//Kongsted
Avatar billede ffsoft Praktikant
25. april 2006 - 21:34 #8
Du kan ikke bruge en .mdw fil til ret meget, der ligger et par forespørgsler der kan bruges til oplysninger om hvem der er medlem
af hvilke grupper.
Det kan måske klares med API kald.
Mit forslag går på at du har et ekstra felt i tabellen som hedder afdeling, ved oprettelse bliver her automatisk skrevet hvilken afdeling der ar oprettet posten. Alle kan læse posten, men det er kun folk fra samme afdeling der må slette/ændre posten.
Det klares ved at bruge Me.AllowEdits = false på formen for folk som ikke tilhører gruppen.
Avatar billede kongsteddk Nybegynder
25. april 2006 - 21:38 #9
Me.AllowEdits har jeg gennemskuet - så langt så godt.
Lige nu har jeg brugerne oprettet i den berygtet mdw-fil. Er det den bedste løsning, eller er der alternativer, som er bedre?
Jeg har forsøgt at hente et afdelingsnr. ud af en tabel med "CurrentUser" som kriterie. Det har jeg fundet ud af ikke er nogen særlig let løsning.
Jeg har forstået teorien i ovenstående forslag. Det er bare som om at jeg er lidt blank hvad koden angår - jeg kan ikke rigtigt få prikket hul på "bylden".... :-)

//Kongsted
Avatar billede ffsoft Praktikant
26. april 2006 - 11:42 #10
Brugeren skal logge sig ind for at bruge databasen, når brugeren er godkendt
lægger du brugernavn og i hver sin globale variabel.

gstrBrugernavn = me!txtBrugernavn
gstrAfdeling = me!cboAfdeling

I tabellen der ligger under formularen skal du have et felt
der hedder afdeling. På formularens on_current hændelse
kan du så skrive

if rst("afdeling") = gstrAfdeling
Me.AllowEdits = True
else
Me.AllowEdits = False
end if
Har du delt databasen op så du har en frontend og en backend
ellers skal du overveje at gøre det.
Avatar billede kongsteddk Nybegynder
26. april 2006 - 15:37 #11
Hej.

Jeg har fået det til at virke delvis.

Jeg er kommet frem til følgende kode:
Private Sub Form_Open(Cancel As Integer)
    Dim curDB As Object
    Dim strBrugerNavn As String
    Dim strAfdeling As String
   
    Set curDB = CurrentDb
    strBrugerNavn = LCase(CurrentUser)
    strAfdeling = LCase(Me!Afdeling)
   
    If strBrugerNavn = LCase(Afdeling) Then
        Me.AllowEdits = True
    Else
        Me.AllowEdits = False
    End If
End Sub

Det giver dog det problem at det er afhængig af første post der bliver åbnet. Hvordan løser jeg det problem? Jeg skulle jo gerne have funktionen til at køre hver gang en post bliver indlæst... :-)

//Kongsted
Avatar billede ffsoft Praktikant
01. maj 2006 - 15:49 #12
Du skal bruge hændelsen On_Current i stedet for Form_Open
Avatar billede kongsteddk Nybegynder
01. maj 2006 - 16:33 #13
Takker for hjælpen... Projektet er nu færdigt... :-)

//Kongsted
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



IT-JOB