In LotusScript abbiamo le classi per manipolare l’ACL di un database ma purtroppo non esiste un metodo per copiare direttamente un ACL da un database ad un altro .
Ecco una sub che esegue la copia dell’ACL , compresi i ruoli :
Sub copiaAcl( dbPartenza As NotesDatabase , dbArrivo As NotesDatabase)
Dim acl As NotesACL
Dim targetacl As NotesACL
Dim entry As NotesACLEntry
Dim targetEntry As NotesACLEntry
Dim entry2 As NotesACLEntry
If dbArrivo Is Nothing Then
Call scrivilog("Non trovo db arrivo",2,"copiaAcl")
Exit Sub
End If
On Error GoTo Gestisci_copiaAcl:
'Istanzio i due ACL
Set acl = dbPartenza.ACL
Set targetacl = dbArrivo.ACL
'Rimuovo le entry del db arrivo per evitare duplicati
Set targetentry = targetacl.getfirstEntry
While Not(targetentry Is Nothing)
'Skip se la entry è -Default- , LocalDomainAdmins o LocalDomainServers
If targetentry.name <> "-Default-" And targetentry.name <> s.username And targetentry.name <> "LocalDomainServers" And targetentry.name <> "LocalDomainAdmin" Then
Set entry2 = targetacl.getnextentry(targetentry)
Call targetentry.remove()
Call targetACL.save()
Set targetentry = entry2
Else
Set targetentry = targetacl.getnextentry(targetentry)
End If
Wend
'Rimuovo ruoli esistenti
ForAll r In targetacl.roles
If r<>"" Then Call targetacl.deleterole(r)
End ForAll
Call targetacl.save()
'Creo ruoli nuovi
ForAll r In acl.roles
If r<>"" Then Call targetacl.addrole(r)
End ForAll
'Adesso scrivo l'ACL sul di db di arrivo
Set entry = acl.GetFirstEntry
While Not(entry Is Nothing)
If targetentry.name <> "-Default-" And targetentry.name <> s.username And targetentry.name <> "LocalDomainServers" And targetentry.name <> "LocalDomainAdmin" Then
Set targetEntry = targetACL.CreateACLEntry(entry.name, entry.level)
targetentry.usertype = entry.usertype
targetentry.isgroup = entry.isgroup
targetentry.isperson = entry.isperson
targetentry.isserver = entry.isserver
targetentry.ispublicreader = entry.ispublicreader
targetentry.ispublicwriter = entry.ispublicwriter
targetentry.IsAdminServer = entry.IsAdminServer
targetentry.IsAdminReaderAuthor = entry.IsAdminReaderAuthor
targetentry.CanCreateDocuments = entry.CanCreateDocuments
targetentry.CanDeleteDocuments = entry.CanDeleteDocuments
targetentry.CanCreatePersonalAgent = entry.CanCreatePersonalAgent
targetentry.CanCreateLSorJavaAgent = entry.CanCreateLSorJavaAgent
targetentry.CanCreateSharedFolder = entry.CanCreateSharedFolder
targetentry.CanCreatePersonalFolder = entry.CanCreatePersonalFolder
targetentry.CanReplicateorCopyDocuments = entry.CanReplicateorCopyDocuments
ForAll r In entry.roles
If r<>"" Then Call targetentry.enablerole(r)
End ForAll
Call targetACL.save()
End If
Set entry = acl.GetNextEntry(entry)
Wend
Set targetentry=targetacl.getentry("-Default-")
Set entry=acl.getentry("-Default-")
targetentry.level = entry.level
targetentry.ispublicreader = entry.ispublicreader
targetentry.ispublicwriter = entry.ispublicwriter
targetentry.CanCreateDocuments = entry.CanCreateDocuments
targetentry.CanDeleteDocuments = entry.CanDeleteDocuments
targetentry.CanCreatePersonalAgent = entry.CanCreatePersonalAgent
targetentry.CanCreateLSorJavaAgent = entry.CanCreateLSorJavaAgent
targetentry.CanCreateSharedFolder = entry.CanCreateSharedFolder
targetentry.CanCreatePersonalFolder = entry.CanCreatePersonalFolder
targetentry.CanReplicateorCopyDocuments = entry.CanReplicateorCopyDocuments
ForAll r In entry.roles
If r<>"" Then Call targetentry.enablerole(r)
End ForAll
Call targetACL.save()
fine_acl:
Exit Sub
Gestisci_copiaAcl:
errmsg$ = Str(Err) & ": " & Error$ & " linea " & CStr(Erl)
Print errmsg$
Resume fine_acl
End Sub

0 commenti