28. januar 2002 - 13:39Der er
6 kommentarer og 2 løsninger
Jeg gi'r op...
Nu har jeg simpelthen tæsket rundt i jeg ved ikke, hvor lang tid for at få løst det her problem. Nu er jeg kommet dertil, hvor jeg bare stirrer mig mere og mere blind på det. Problemet er: I en database har jeg to forms, lad os for nemhedens skyld kalde dem A og B. Jeg har nogle brugere, der skal kunne redigere/oprette og slette både A og B-dokumenter, og jeg har nogle brugere, der kun må oprette/redigere og slette B-dokumenter. De skal dog alle kunne læse A-dokumenter. Jeg troede at løsningen var fundet, men nu viser det sig, at sidstnævnte brugere ikke kan redigere de dokumenter, der tidligere har oprettet... Jeg har forsøgt med roller, ændringer i ACL og jeg ved snart ikke hvad... Nogen gode ideer ??? På forhånd tak...
Hvordan kan det være at roller ikke virker..? Hvad hvis du nu lavede et skjult felt på hver form. Dette felt tager værdi der relaterer til brugerrollen. Så laver du en test mod dette felt (@IsMember og @UserRoles. Jeg vil tror at dette vil slå igennem på tidligere oprettede docs da feltet ligger i formen. Op med Humøret !-) MvH
Ideen med roller er rigtig god: Opret en rolle til Gruppe1 og en rolle til Gruppe2. Alle dokumenter(A) skal så indeholde rollen til Gruppe1, og B skal endvidere indeholde rollen til Gruppe2. Rollerne placeres så i forfatterfelter, vistnok. Har selv lavet noget ligner lidt, blot med kombination af brugernavn og bruger rolle. Bare klø på. Mvh Cbkc.
Jeg vil foreslå også at afkrydse rollerne i adgangskontrollen for hver form under "Sikkerhed". Her kan du jo styre hvilken rolle som skal kunne oprette og hvem som skal læse den pågældende form.
Mht. at kunne slette dokumenter, kan man lave et script i Querydocumentdelete, sådean lidt af la:
Dim session As New NotesSession Dim db As NotesDatabase Dim col As notesdocumentcollection Dim doc As notesdocument, doc1 As notesdocument Dim view As NotesView Dim Acces As String Dim user As String Dim AdgangFor As String
'Først skal vi vide hvem der forsøger at slette. user = session.UserName 'db sættes til aktuelle database. Set db = session.CurrentDatabase 'col (af typen documentcollection) bliver sat til det/de dokumenter der er markeret til sletning Set col=source.documents 'doc sættes til det første af dokumenterne i col. I while-løkken loopes over de resterende dokumenter i col. Set doc=col.getfirstdocument 'I nedenstående While løkke, sikres at kun hvis user står på adgangslisten, kan der slettes. While Not doc Is Nothing If doc.form(0) = "Formularnavn" Then 'Her havner vi kun hvis det er et dokumnet af typen 'formularnavn. 'I For løkken testes om user er et af navnene i 'adgangslisten i dokumentet. For i = 0 To Ubound(doc.adgang) acces = doc.adgang(i) 'AdgangFor = AdgangFor & acces & "; " If Instr(user, acces) > 0 Then continue = True 'Hvis det er tilfældet, er sletning ok, og der 'springes til næste dokument markeret 'til sletning Goto spring End If Next 'Hvis user ikke stod i adgangslisten, når vi hertil - og 'ellers ikke. Msgbox "Du har ikke rettigheder til at slette dokumentet: " & doc.institutionsnavn(0),0 + 48, "Ouerydocumentdelette" continue = False Goto spring End If spring: 'doc sættes til det næste dokument i col Set doc=col.getnextdocument(doc) Wend
Evt. kan man erstatte username fra adgangslisten, med navn i forfatter felt eller lignende.
Alternativ løsning: 1) Tildel en rolle til dem der må mere end læse A dokumenter. 2) For at undgå man editering af dokumentet efter det er åbnet for læsning: I design på formen intaster du følgende under eventen 'QueryModeChange':
Dim V As Variant
If Continue Then V=Evaluate(|@IsMember("[DinRolle]"; @UserRoles)|) If V(0)=0 Then Messagebox("Desværre, du kan ikke editere dokumentet") continue = False End If
3) For at undgå man editering af dokumentet direkte fra et view: I design på formen intaster du følgende under eventen 'Querymode':
Dim V As Variant With Source.Document If Mode=1 Then V=Evaluate(|@IsMember("[DinRolle]"; @UserRoles)|) If V(0)=0 Then Messagebox("Desværre, du kan ikke editere dokumentet") continue = False End If End With
4) For at undgå sletning af dokumentet: I database scriptet under eventen 'Querydocumentdelete'skriver du:
Dim V As Variant If Continue Then V=Evaluate(|@IsMember("[DinRolle]"; @UserRoles)|) If V(0)=0 Then Messagebox("Desværre, du kan ikke slette dokumentet") continue = False End If
Hov, jeg glemte koden for test af dokument type :-)
I 3 og 4 skal der derfor indsættes følgende IF sætning 3) Dim V As Variant With Source.Document If Source.form(0) = "Formularnavn" Then If Mode=1 Then V=Evaluate(|@IsMember("[DinRolle]"; @UserRoles)|) If V(0)=0 Then Messagebox("Desværre, du kan ikke editere dokumentet") continue = False End If End if End With
4)Dim V As Variant If Source.form(0) = "Formularnavn" Then V=Evaluate(|@IsMember("[DinRolle]"; @UserRoles)|) If V(0)=0 Then Messagebox("Desværre, du kan ikke slette dokumentet") continue = False End If
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.