Oft hat man innerhalb eines Workflows die Anforderung ein Dokument in einer Dokumentenbibliothek in WSS nach bestimmten Aktionen zu sperren und nur noch Lesezugriff auf das Dokument zuzulassen.
Dies macht einem in mehreren Punkten Kopfzerbrechen
Das untenstehende Codeschnipsel ist aus einem Workflow und tut folgendes:
SPFile docFile = thisitem.File; SPRoleAssignmentCollection spra = thisitem.RoleAssignments; ... SPRoleAssignmentCollection spraParent; if (docFile.ParentFolder.Item != null) { spraParent = docFile.ParentFolder.Item.RoleAssignments; } else { spraParent = thisitem.ParentList.RoleAssignments; }; foreach (SPRoleAssignment spr in spra) { if (spr.Member.Name.ToString() != "Document Admins") { spr.RoleDefinitionBindings.RemoveAll(); }; spr.Update(); } foreach (SPRoleAssignment spr1 in spraParent) { SPGroup spnewGroup; SPUser spnewUser; spnewGroup = null; spnewUser = null; if (spr1.Member.Name.ToString() != "Document Admins") { String strgroup = spr1.Member.Name.ToString(); int i; for (i = 0; i < thisWeb.Users.Count; i++) { if (thisWeb.Users[i].Name == strgroup) { spnewUser = thisWeb.Users[i]; break; }; }; if (spnewUser == null) { for (i = 0; i < thisWeb.Groups.Count; i++) { if (thisWeb.Groups[i].Name == strgroup) { spnewGroup = thisWeb.Groups[i]; break; }; }; }; if (spnewGroup != null) { SPRoleDefinition RoleDefReader = thisWeb.RoleDefinitions.GetByType(SPRoleType.Reader); SPRoleAssignment RoleAssReader = new SPRoleAssignment((SPPrincipal)spnewGroup); RoleAssReader.RoleDefinitionBindings.Add(RoleDefReader); thisitem.RoleAssignments.Add(RoleAssReader); }; if (spnewUser != null) { SPRoleDefinition RoleDefReader = thisWeb.RoleDefinitions.GetByType(SPRoleType.Reader); SPRoleAssignment RoleAssReader = new SPRoleAssignment((SPPrincipal)spnewUser); RoleAssReader.RoleDefinitionBindings.Add(RoleDefReader); thisitem.RoleAssignments.Add(RoleAssReader); }; thisitem.Update(); }; }; thisitem.Update(); ...
Viel Spaß beim Ausprobieren
Sven