Autor Thema: Ersteller darf löschen, Gruppe nicht  (Gelesen 1441 mal)

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Ersteller darf löschen, Gruppe nicht
« am: 07.06.04 - 11:26:11 »
Ich hab eine db wo ich im Doc eine Autorenfeld habe das sich beim erstellen Berechtenet:

@UserName : "[admin]" : "[FE]"

So nun möchte ich haben das nur der User der das Doc erstellt hat auch löschen darf. Aber die User mit der Rolle [FE] müssten das Doc bearbeiten können (aber nicht löschen). Das Problem dabei ist das der User der das Doc erstellt hat, auch in der Rolle [FE] ist. In der ACL steht nur die Gruppe FE als Autor mit Löschrechten. aber keine einzelnen Personen.
Wie kann ich das realiseirensieren?
Ich hab es mal so Probiert aber was ist wenn jemand mehrer doc's auswählt?

Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)   
   Dim s As New NotesSession   
   Dim dc As NotesDocumentCollection
   Set dc = Source.Documents
   Set doc = dc.GetFirstDocument
   Do Until doc Is Nothing
      
      If s.UserName= doc.createBy(0) Then
         Continue = True
         Exit Sub
      End If
      Set doc = dc.GetNextDocument(doc)
   Loop
   
   Msgbox "You don't have permission to delete this document.", 0 + 16, "No Access"   
   Continue = False
End Sub
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Glombi

  • Gast
Re:Ersteller darf löschen, Gruppe nicht
« Antwort #1 am: 07.06.04 - 11:35:07 »
Du musst alle Dokumente der Collection prüfen. Falls der User mindestens ein Dokument nicht erstellt hat: Meldung und Abbruch

Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)  
   Dim s As New NotesSession  
   Dim dc As NotesDocumentCollection
dim loeschen_ok as integer
loeschen_ok  = true
   Set dc = Source.Documents
   Set doc = dc.GetFirstDocument
   Do Until doc Is Nothing
     
      If s.UserName <> doc.createBy(0) Then
loeschen_ok = false
exit do
      End If
      Set doc = dc.GetNextDocument(doc)
   Loop
   
if not loeschen_ok  then
   Msgbox "You don't have permission to delete this document.", 0 + 16, "No Access"  
   Continue = False
exit sub
end if
End Sub

Andreas
« Letzte Änderung: 07.06.04 - 11:35:29 von Glombi »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Ersteller darf löschen, Gruppe nicht
« Antwort #2 am: 07.06.04 - 12:05:46 »
...      
      If s.UserName <> doc.createBy(0) Then
...

Hi,

die Lösung von Glombi ist prinzipiell richtig, setzt aber voraus, dass der Username des Erstellers immer an erster Stelle des Feldes steht (siehe obige Zeile). Sonst geht die IF-Abfrage "in die Hose".

Wenn du ganz sicher gehen willst, legst du zwei Autorenfelder an. Das eine enthält den Ersteller und das andere die Rollen.

Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re:Ersteller darf löschen, Gruppe nicht
« Antwort #3 am: 07.06.04 - 13:10:37 »
Warum mein Autorenfeld ist ja berechnet beim Anlegen mit dieser Formel:

@UserName : "[admin]" : "[FE]"


Also passt es eigentlich immer.

Das mit dem 2 Feld wäre natürlich auch gegangen aber ich probiere es immer mit so wenig Felder wie möglich.

Aber danke nochmal.
Ich hab das ganze ein wenig modifiziert:

Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)   
   Dim s As New NotesSession   
   Dim dc As NotesDocumentCollection
   Dim loeschen_ok As Integer   
   loeschen_ok  = False
   If RoleEnabled("[admin]") Then
      Continue = True
      Exit Sub
   Elseif RoleEnabled("[FE]") Then
      Set dc = Source.Documents
      Set doc = dc.GetFirstDocument
      Do Until doc Is Nothing
         If s.UserName <> doc.createBy(0) Then
            loeschen_ok = False
            Exit Do
         Else
            loeschen_ok  = True
         End If
         Set doc = dc.GetNextDocument(doc)
      Loop
   End If
   If Not loeschen_ok  Then
      Msgbox "You don't have permission to delete this document.", 0 + 16, "No Access"  
      Continue = False
      Exit Sub
   End If
End Sub
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz