Hallo zusammen,
wie bekomme ich es hin, das ich für mehrer Mailfiles gleichzeitig/in einem Rutsch, den jeweiligen User/Owner von Manager auf Editor setze?
Vielen Dank!
Marcel
Hallo zusammen,
wie bekomme ich es hin, das ich für mehrer Mailfiles gleichzeitig/in einem Rutsch, den jeweiligen User/Owner von Manager auf Editor setze?
Vielen Dank!
Marcel
Indem du mehrere DBs im Adminclient markierst und die ACL bearbeitest.
So kann ich Namen hinzufügen usw., aber nicht wirklich das Recht ändern. Das soll für 500 -700 User funktionieren.
Selbstverständlich kann man das! Der Button, der mit 'Modify' beschriftet ist, macht -oh Wunder- genau das: modifizieren.
Nachzulesen in der Hilfe unter "Editing entries in multiple ACLs"...
Ich glaube du verstehst ihn falsch.
Er will nicht in mehreren Datenbanken den gleichen User/Gruppe auf Editor setzen sondern jeweils den MailOwner
... dann geht es nur per Script, welches den Besitzer der Mail-DB ermittelt und dann in der ACL den Eintrag für den Besitzer in den Rechten verändert.
Gruß
Dirk
[size=x-small][color=CC0000]Bitte Themenpräfix beachten[/color][/size]
hm, im Grunde hast Du Recht, wäre schön gewesen.
Leider tut diese Funktion nicht wirklich.
Probiere mal bitte 2 Mailfiles und ändere den Owner von x nach Editor oder Manager.
Du wirst sehen, das er es nur bei einem tut und auch nen Fehler anzeigt. Passiert zumindest bei meinem 8.0.1er Admin auf einem 7.0.2er Dominoserver.
EDIT:
Genau Taurec
Hat da jemand ein Script für mich?
Ok, hab ich in der Tat missverstanden ... bin heute nicht wirklich gut drauf.
Ein fertiges Script werde ich nicht posten aber zumindest genug, dass du es dir zusammenreimen kannst:
mit der NotesDbDirectory-Klasse holst du dir alle Datenbanken und prüfst mit Left ab, ob der FileName "mail" enthält (ggf. auspassen bei Verzeichnisse wie "mailin"). Wenn ja, kommst du mit GetProfileDocument ans Kalenderprofil und das Feld "Owner". Mit GetEntry der NotesACL-Klasse suchst du dir den Namen, welchen du dann mit GrantAccess der selben Klasse auf Editor zurückstufst.
Die kursiv hervorgehobenen Begriffe sind bei Bedarf in der Hilfe nachzuschlagen. Anahnd der jeweiligen Beispiele wird deutlich, was wie zu tun ist.
Falls es mal einer braucht, hier ist ein Code.
Ich habe den Code komplett im Designer 8.0.1 direkt unter "Initialize" eingegeben. Der Designer splittet ihn selbstständig auf.
Zwei Tests liefen erfolgreich, der Zugriffslevel der Mailfile Eigentümer wurde von xxx auf Editor gesetzt.
Sub Initialize
Dim session As Notessession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim dbmail As NotesDatabase
Dim owner As Variant
Dim strmailfile As String
Dim cserver As String
Dim dbdir As NotesDatabase
Dim docu As NotesDocument
Dim searchString As String
Dim cu As Integer
Dim dcu As NotesDocumentCollection
Dim strmailfiles As String
Dim strmailserver As String
Dim x As Integer
Set session = New NotesSession
Set db = session.CurrentDatabase
cserver = db.Server 'Get the servername of the server where this database is located.
Set dbdir = session.GetDatabase(cserver ,"names.nsf") 'Use the Domino Directory (NAB) on the current server.
searchString = |Form = "Person"|
Set dcu = dbdir.Search(searchString, Nothing, 0)
cu = dcu.Count
Redim varEntries(cu, 2) 'Update the array varEntries with the right amount of records.
Set docu = dcu.GetFirstDocument
While Not (docu Is Nothing) 'Populate the array with data from the person documents.
varEntries(x,0) = docu.mailfile(0)
strmailfiles = strmailfiles + |"| + Strright(docu.mailfile(0), "\") + |":|
varEntries(x,1) = docu.FullName
varEntries(x,2) = docu.mailserver(0)
Set docu = dcu.GetNextDocument(docu)
x = x + 1
Wend
strmailfiles = Left(strmailfiles,Len(strmailfiles)-1)
For x = 0 To cu-1
strmailfile = varEntries(x,0)
strmailserver = varEntries(x,2)
owner = varEntries(x,1)
If owner(0) <> session.UserName Then
Set dbmail = session.GetDatabase(strmailserver, strmailfile)
Call CheckAcl(dbmail, owner(0))
End If
Next
End Sub
Sub CheckAcl(dbmail As NotesDatabase, strusr As Variant)
Dim acl As NotesACL
Dim entry As NotesACLEntry
If Not (dbmail.IsOpen) Then
Messagebox "Could not open mailfile for " & strusr,,"Warning"
Exit Sub
End If
Set acl = dbmail.ACL
Set entry = acl.GetEntry(strusr)
If entry Is Nothing Then
Messagebox "No acl entry for " & strusr & " present in " & dbmail.Title,,"Warning"
Else
entry.UserType = ACLTYPE_PERSON
entry.Level = ACLLEVEL_EDITOR
entry.CanDeleteDocuments = True
entry.CanCreateLSOrJavaAgent = True
entry.CanReplicateOrCopyDocuments = True
acl.AdministrationServer = "yourserver/here"
Call acl.Save
End If
End Sub
Das ist aber ein extrem schräger Code, den Du da gefunden hast.
Beispiel:
varEntries(x,1) = docu.FullName
FullName ist in der Regel ein Array mit mehreren Einträgen. Der erste Wert darin *kann* der richtige sein, muss es aber nicht.
Richtig wäre:
varEntries(x,1) = docu.Owner (0)
Ein Array of Variants zu deklarieren, ist sowieso ... unsauber.
Von derartigen Stellen gibt es im Code noch mehr. Viel Spass damit ...
Bernhard
Hi Bernhard, leider kann ich das nicht beurteilen und bin erstmal zufrieden.
Solltest du was "sauberes habe" lass es mich wissen.
Danke!
Zitat
msomst schrieb:
... leider kann ich das nicht beurteilen und bin erstmal zufrieden.
Das ist eben die grosse Gefahr. Du kannst "black boxes" verwenden, die Du nicht verstehst und gar nicht verstehen kannst - wenn der Anbieter dafür haftet und Dir im Fall der Fälle dann auch zur Seite steht.
Aber Code zu verwenden, den man irgendwo "findet", aber nicht versteht ... Das kann böse enden.
Und ja, natürlich habe ich etwas "sauberes", und ich bin da mit absoluter Garantie nicht der einzige. Nur: Ich garantiere dann auch dafür, und ich habe meine Zeit da hinein gesteckt. Und ich muss (und darf meine Familie damit ernähren. Ergo kosten meine Lösungen immer Geld. Tipps und Tricks, Hinweise in die richtige Richtung etc. gibt es kostenlos - dafür bin ich ja in Foren unterwegs, um zu helfen. Nur: Ich mache nicht und niemals die Arbeit anderer Leute. Was wiederum Prinzip der Foren ist.
Auf den ersten Blick (und tiefer mag ich in diesen unschönen Code nicht hineinschauen): Das schlimmste, was Dir passieren kann, ist das User nach wie vor Manager sind - auch wenn der Code gelaufen ist. Angezeigt wird Dir das Ergebnis ja nicht (was ich so niemals machen würde - das Ergebnis und eine Listung aller erfolgreichen und nicht erfolgreichen Fälle gebe ich prinzipiell aus).
Dass Du jemanden ganz heraus kickst, kann ich nicht erkennen. Aber wie gesagt - nur auf den ersten Blick.
Bernhard
n'Abend!
Ich muss da auch gerade mal meinen Senf dazu geben. Zuerst: Bernhard ist da in Gänze Recht zu geben: Code zu verwenden, den man nicht versteht, ist zumindest mal mutig. Was wäre passiert, hätte es nicht geklappt? Wahrscheinlich hättest du den Code hier gepostet und wir hätten dann -in Unkenntnis deiner Umgebung- raten müssen, was nun schief läuft. Das kann eine ganze Menge sein.
Zunächst einmal ist der Code nicht sonderlich performant. Es wird erst eine Suche anstatt einer Volltextsuche durchgeführt. Bei ein paar Dutzend oder einer kleinen 3-stelligen Anzahl an Usern mag das noch angehen, bei großen Umgebungen ist das das erste Problem. Dann werden sämtliche Dokumente abgegrast und die benötigten Informationen (Bernhard sprach den FullName bereits an) in ein Array (of Variants) geschrieben, welches dann schlussendlich dazu dient die DBs zu holen, um die ACLs umzubiegen. Bis auf den Teil mit der Suche übers Adressbuch, was eine durchaus sinnige Alternative zur NotesDbDirectory-Variante darstellt, ist das in sich schon mal Kohl. Weil, warum ein Array einmal füllen und einmal abarbeiten, wenn ich gleich im ersten Schritt alle Informationen habe?
Dann verstehe ich nicht, warum die ACLs aller DBs umgebogen werden, bis auf die, die dem User gehört, der gerade den Agenten ausführt?
Hinzu kommt, dass es durchaus möglich sein kann, dass es z.B. mehrere Admin-IDs gibt: eine zum Signieren der DBs (unter der ID laufen dann Agenten), eine fürs Mailjournaling, etc. Normal arbeitet man nicht mit den IDs, insofern ist es relativ egal, ob diese technische ID Manager oder Editor auf ihrem Mailfile ist. Aber unschön finde ich persönlich das dennoch. Ebenfalls kann es weitere technische IDs geben: einige werden sich noch an NotesPump erinnern. Vermutlich hat niemand mehr NotesPump, aber wir alle kennen "historisch gewachsene" Umgebungen. Weitere Alternativen sind denkbar.
Das Error-/Success-Logging wurde ebenfalls erwähnt.
Dann kann man durchaus darüber streiten, ob es Not tut, dass ein zum normalen User herabgestufter Anwender, tatsächlich LS- und Java-Agenten erstellen können muss. Klar, ist der Haken nicht gesetzt, landen die Agenten in der desktop.dsk. Aber genau da gehören die auch hin, sonst scheduled jemand das Ding auf 23:00 Uhr und schießt mir nachts meinen Server ab...
Und schlussendlich: dieser Agent bedingt, dass bei mehreren Mailservern in der Umgebung jeder bei jedem anderen als Trusted Server gelistet ist. Normal hat man Mailcluster, vermutlich sind die Clusterpartner trusted, muss aber nicht und schon geht das Ding auf die Bretter. Dann habe ich in Umgebungen schon gesehen, dass z.B. Mitarbeiter externer Firmen im DD gelistet sind und auch der Server der externen Firma als Mailserver hinterlegt ist. Spätestens hier kann man davon ausgehen, dass kein Vertrauensverhältnis besteht. Heißt der User nun per Zufall "Alex Anders", geht mit hoher Wahrscheinlichkeit der Agent gleich beim ersten Versuch in die Knie. Ohne Errorlogging steht man im Niesel, um nicht zu sagen: im Regen.
Der gesamte Code hat soviele flaws, dass ich jedem, der irgendwann einmal auf diesen Code stößt, ernsthaft abraten muss, den zu verwenden. Von den "Schönheitsfehlern" (Array of Variants) einmal abgesehen, sind da derartig viele logische Fehler drin, dass es bestenfalls als Anhaltspunkt für einen eigenen Agenten dienen kann. Von einem (am Besten noch: ungetesteten) Einsatz in einer Produktivumgebung kann nicht einmal ansatzweise die Rede sein!
"Rock wilder" - der Nickname passt wirklich. Gut gebrüllt, Löwe!
Man könnte sich wohl noch eine ganze Weile mit dem Code beschäftigen und wird immer noch "no-no!'s" finden. Nur eine Anmerkung noch: Man könnte ja gleich die passende view im DD durchgehen und damit alle personengebundenen Mailfiles erwischen ... Im DD kann sollte man dann auch gleich abklären, ob es denn überhaupt ein Mailfile gibt. Und dann sind wir auch schon bei "Mailfile liegt auf anderem Server" - aber das hattest Du Dir ja schon zur Brust genommen.
Man "findet" eine Menge Code im Internet, und sehr häufig erinnern derartige Veröffentlichungen an "Genosse Hauptmann, Genosse Hautpmann - ich weiss etwas ... Im Kreml brennt noch Licht!". Wird etwas auf einer Website veröffentlicht (und das gilt auch für die Sandbox und OpenNTF), heisst das noch lange nicht, dass es etwas taugt. Dort wirkliche Perlen zu finden, ist eher schwer. Als Ideengeber (wenn man sich auskennt und weiss, was man tut), sieht das *etwas* anders aus, aber - und da sind wir wieder beim Kern - der Weisheit letzten Schluss bzw. die ultimative "fire & forget"-Lösung wird man dort nicht finden. Eigeninitiative und eigene Verantwortung sind da angesagt, sonst kann es furchtbar krachen.
Bernhard