2014-10-17 108 views
1

我已經包含在的SPWeb一個列表,並在網上被提供的事件接收器通過使用此代碼更改列表的權限:SharePoint 2010中更改列表的權限

[...] 
SPList theList = web.Lists[listName]; 
theList.BreakRoleInheritance(false); 
SPGroup group = web.Groups["MyGroup"]; 
SPRoleAssignment ra = new SPRoleAssignment(group); 
SPRoleDefinition roleDef = web.RoleDefinitions.GetByType(SPRoleType.Contributor); 
ra.RoleDefinitionBindings.Add(roleDef); 
list.RoleAssignments.Add(ra); 
list.Update(); 

在工作流程後來我需要改變允許該組成爲Reader而不是Contributor。我已使用以下代碼

SPList theList = web.Lists[listName]; 
foreach (SPRoleAssignment assignment in theList.RoleAssignments) { 
    if (assignment.Member.Name == "MyGroup") { 
     assignment.RoleDefinitionBindings.RemoveAll(); 
     SPRoleDefinition rda = web.RoleDefinitions.GetByType(SPRoleType.Reader); 
     assignment.RoleDefinitionBindings.Add(rda); 
    } 
} 

但是,此代碼不起作用,並且不會更改列表中的權限。

任何人都可以幫助理解哪一個是更改現有委託人權限的正確方法嗎?

感謝

+1

你在做foreach之後做一個theList.Update()嗎? – AdamBT 2014-10-17 17:36:49

+1

大聲笑。這麼多時間試圖理解爲什麼......非常感謝你的建議。如果你把它寫成答案,我可以標記它是正確的。 – Lorenzo 2014-10-21 12:14:05

回答

1

你需要你的foreach語句後做一個theList.Update()