Я хочу перебрать все сайты в семействе сайтов и изменить разрешение для определенного сайта.
Мой код:
SPSite oSiteCollection = SPContext.Current.Site;
SPWebCollection collWebsite = oSiteCollection.AllWebs;
foreach (SPWeb web in collWebsite)
{
web.AllowUnsafeUpdates = true;
if (web.Name == "SiteName")
{
web.BreakRoleInheritance(true);
string[] groups = new string[2] { "Group1", "Group2" };
foreach (string item in groups)
{
SPGroup removeGroup = web.SiteGroups[item];
web.RoleAssignments.Remove(removeGroup);
SPGroup addGroup = web.SiteGroups[item];
SPRoleDefinition roleDefinition = web.RoleDefinitions["Read"];
SPRoleAssignment roleAssignment = new SPRoleAssignment(addGroup);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
web.RoleAssignments.Add(roleAssignment);
}
}
}
, но выдает ошибку
Error changing permissions, details: There are uncommitted changes on the SPWeb object, call SPWeb.Update() to commit the changes before calling this method.
Код работает просто отлично, если я хочу сделать то же самое, но для списков вместо
SPListCollection collList = web.Lists;
foreach (SPList oList in collList)
{
//and so on
Я пытался поместить web.Update () в разные места, но безуспешно.Есть идеи?
Заранее спасибо.
Редактировать:
Я прокомментировал большую часть материала и оставил только
if (web.Name == "SiteName")
{
web.BreakRoleInheritance(true);
web.Update();
}
но все равно выдает ту же ошибку.