Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 25.12.03 - 18:51:59

Titel: ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 25.12.03 - 18:51:59
Hi,

ich suche nach einer Möglichkeit, dass User per Buttonklick alle aktuellen Rechte der DB aufgelistet bekommen.

Daher will ich einen Button einbauen in die DB, der z.B. folgende Auflistung bringt:

Benutzer                | Typ                   | Rechte           | Rollen
----------------------------------------------------------------------------------------
Admins                    Gruppe               Manager          [Admin], [ReadAll]
Beate Turnschuh     Person               Editor              keine
Rainer W.                 Person              Leser               [ReadAll]


Hat schon mal wer sowas in der Art gemacht? Ich will ja das Rad nicht neu erfinden....

Es geht mir auch jetzt nicht um die Darstellung, mir gehts vielmehr darum wie ich die ACL auslesen kann und dann die Ergebnisse in ein String bzw. Array reinbringe.....

TMC
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: animate am 25.12.03 - 19:28:18
ich hab sowas noch nicht gemacht.
das müsste doch recht simpel mit den ACL-Klassen in Lotusscript machbar sein.
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 28.12.03 - 02:06:06
@ganjasmoker ( ;D):
Jip, sollte möglich sein.
Ist aber imho ein ziemlicher Akt, wenn ich mir die ACL-Klasse so ansehe.
Daher frag ich lieber mal hier, ob es evtl. schon eine halbfertige Lösung im www etc. gibt oder jem. ansonsten noch Tipps hierzu parat hat.

TMC
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: animate am 28.12.03 - 02:58:49
also so ein akt ist das ja auch wieder nicht.
Die NotesACL-Klasse hat die GetFirstEntry und die GetNextEntry Methode.
Mit den beiden kannst du durch die ACL Einträge iterieren, sie liefern die ein Objekt der Klasse ACLEntry.
Die Klasse hat Attribute wie z.B. Name, IsGroup, IsPerson, Level und Roles.
Und schon hast du alle Informationen, die du brauchst
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 28.12.03 - 03:10:31
Stimmt, hast eigentlich Recht, hmm,.....

Mit GetFirstEntry / GetNextEntry hol ich mir was drinsteht, und schaue dann jew. nach was die denn alles dürfen.....

Mein Fehler war: Hab in der Designerhelp nur "ACLClass" im Überflug angesehen, interessant ist aber "NotesACLEntry class".

Danke,
TMC


Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: cococo69 am 21.01.04 - 11:33:55
Hallo TMC,

hast du zwischenzeitlich eine Lösung?

Oder hat sonst wer so ein Tool?

Gruß
cococo69
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: klaussal am 21.01.04 - 12:19:54
... nimm doch die catalog.nsf
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: koehlerbv am 21.01.04 - 12:21:20
TMC will ja seinen Usern per Buhtong die ACL der aktuellen DB zur Verfügung stellen ...
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: klaussal am 21.01.04 - 12:41:01
... agent starten, catalog.nsf durchsuchen und doc anzeigen.
ist mal so eine idee..... :P
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: Don Pasquale am 21.01.04 - 12:47:59
Hi TMC,

das ist Teil einer Routine mit der ich aus der ACL
alle Personen auslese. Ist doch schon mal ein Anfang.

Ciao
Don Pasquale

   Dim ws As New NotesUiWorkspace
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim view As NotesView
   Dim acl As NotesACL
   Dim Entry As NotesACLEntry

   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set Entry = acl.GetFirstEntry
   While Not Entry Is Nothing
      
      If entry.IsGroup Then
         'Messagebox entry.Name & " ist eine Gruppe."
         Gosub GRUPPEAUSLESEN
      Else
         
         If entry.IsPerson Then
            'Messagebox entry.Name & " ist eine Person."
            Call eintragePerson(entry.name)
         Else
            'Messagebox entry.Name & " ist weder Gruppe noch Person."
         End If
      End If
      Set Entry = ACL.GetNextEntry( Entry )
   Wend
   
   Call ws.ViewRefresh()
   
   Exit Sub
   
   
      ' ******************************** '
   
GRUPPEAUSLESEN:
   
   Dim memfield As Variant
   Dim nd_db As notesdatabase
   Dim g_doc As notesdocument
   Set db = session.currentdatabase
   server$ = db.server
   Set nd_db = New notesdatabase("","")
   flag = nd_db.open(server$, "names.nsf")
   Set view = nd_db.getview("Groups")
   Set g_doc = view.getdocumentbykey(entry.name)
   memfield = g_doc.getitemvalue("members")
   Forall X In memfield
      ename$ = X
      'Messagebox (ename$)
      Call eintragePerson(ename$)      
   End Forall
   Return
   
   
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 21.01.04 - 20:43:52
Hi,

bin leider doch noch nicht dazugekommen mich damit näher zu befassen.

Danke für Eure Tipps, werde es mal demnächst angehen.

Matthias
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: sloe am 23.01.04 - 10:00:36
Hi,
hier auf die Schnelle noch ne Möglichkeit, gibt aber Probleme mit der Übersichtlichkeit, besonders bei Benutzern mit mehreren Rollen.
Code
Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim entry As NotesACLEntry
   Dim ACLarray()
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   i = 1
   Puffer = "     "
   Set entry = acl.GetFirstEntry
   While Not ( entry Is Nothing )
      entryRole = ""
      entryLevel = entry.Level
      entryName = entry.Name
      entryUsertype = entry.UserType
      Forall role In entry.Roles
         entryRole = entryRole & role
      End Forall
      Select Case entryLevel
      Case 0 : 
         Level = "NOACCESS"
      Case 1 : 
         Level = "DEPOSITOR"
      Case 2 : 
         Level = "READER"
      Case 3 : 
         Level = "AUTHOR"
      Case 4 : 
         Level = "EDITOR"
      Case 5 : 
         Level = "DESIGNER"
      Case 6 : 
         Level = "MANAGER"
      End Select
      Select Case entryUsertype 
      Case 0 : 
         UserType = "UNSPECIFIED"
      Case 1 : 
         UserType = "PERSON"
      Case 2 : 
         UserType = "SERVER"
      Case 3 : 
         UserType = "MIXED_GROUP"
      Case 4 : 
         UserType = "PERSON_GROUP"
      Case 5 : 
         UserType = "SERVER_GROUP"
      End Select
      Redim Preserve ACLarray(i)
      ACLarray(i) = Level & Puffer & UserType & Puffer & entryName & Puffer & entryRole
      i = i +1
      Set entry = acl.GetNextEntry( entry )
   Wend
   For j = 1 To Ubound(ACLarray)
      BoxMessage =  BoxMessage & ACLarray(j) & Chr(10)
   Next
   Msgbox "Level:             Typ:                       Name:                    Rollen: " & Chr(10) & "------------------------------------------------------------------------------------------------------" & Chr(10) & BoxMessage,0, "ACL-Datenbankinformationen"
End Sub
Gruß
sloe
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 24.01.04 - 15:44:45
Danke sloe, ich werde das mal anpassen, dass man die Infos in Maskenfelder schreibt zwecks Übersichtlichkeit.

Matthias
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 24.01.04 - 17:51:33
 
OK, ich habe mal das ganze entsprechend umgesetzt.


Um für Anwender die ACL-Einträge übersichtlich darzustellen, kann man das Beispiel in der unten angehängten Datenbank verwenden.

Dazu einfach die Maske "box_ACL" und die Aktion "ACL-Einträge anzeigen" (in der View 'ACL') in eine beliebige Datenbank kopieren.

Durch klick auf den Button "ACL-Einträge anzeigen" erhält man dann folgenden Überblick:
(http://www.atnotes.de/attachments/ACL-Ueberblick.gif)

Über den Button "Copy to clipboard (CSV)" wird die Tabelle in die Zwischenablage kopiert im csv - Format, dadurch ist ein simpler Import z.B. in Excel einfach möglich.

Dieses Thema werde ich dann noch in Best Practices zum Beitrag  "ACL-Zugriffsrechte" entsprechend ergänzen.

Hier die Datenbank zum Download:
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: koehlerbv am 24.01.04 - 19:56:14
Cool, Matthias ! Und wie immer sieht es gut aus ;-)

Bernhard
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 24.01.04 - 20:03:59
Dankeschön Bernhard :-)

Das Script welches dahintersteckt habe ich von sloe verwendet und angepasst (mehrere Felder, CN-Namen statt voller Name in der Darstellung, etc.).

Jetzt ist aber das Script imo noch zu sehr aufgebläht und könnte man kürzen.

Aber erst mal egal, es erfüllt seinen Zweck :-)

Nice to have wäre noch eine Spalte ob der User z.B. löschen darf. Könnte aber auch verwirren, weil ich z.B. die wiederherstellbaren Löschungen von Notes nie verwende, sondern per Default in der Regel jedem Löschrechte gebe, aber dies im Database-Script wieder unterbinde. Dann gibt es dafür einen Buhtong "Löschen", wo ein entsprechendes Lösch-Flag gesetzt wird. Ein 007 erledigt dann den Rest und schmeisst die nach X Tagen raus. Oder aber der Admin setzt die Doks in einer speziellen Ansicht wieder zurück.

Matthias
Titel: Re:ACL - Einträge übersichtlich darstellen
Beitrag von: TMC am 26.01.04 - 20:39:56
Siehe ab sofort unter Best Practices: ACL-Zugriffsteuerung und Überblick für Anwender (http://www.atnotes.de/index.php?board=26;action=display;threadid=13534)

Matthias