我正在使用Sharepoint在線自定義模板,並且我想 在創建子網站時自動將組分配到列表。我所做的:以編程方式在SharePoint上分配權限
- 創建在Visual Studio
- 添加事件接收到的最後一個特徵
- 漫天的featureactivated方法與下面的腳本
應該發生什麼模板,當一個子網站被創建,特徵激活的方法將會觸發,指定的組將被賦予它們對列表的權限。
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
using (SPSite site = properties.Feature.Parent as SPSite)
{
SPWeb web = (SPWeb)properties.Feature.Parent;
try
{
SPList internalNotes = web.Lists.TryGetList("Internal Notes");
SPList externalNotes = web.Lists.TryGetList("Notes");
SPGroup headOfArtists = web.SiteGroups.GetByName("Head of Production");
SPGroup stageDesigners = web.SiteGroups.GetByName("Logistics Manager");
web.BreakRoleInheritance(true);
Tools.GroupHandler.addGroupToSPWeb(web, SPRoleType.Editor, headOfArtists);
Tools.GroupHandler.addGroupToSPWeb(web, SPRoleType.Reader, stageDesigners);
internalNotes.BreakRoleInheritance(true);
externalNotes.BreakRoleInheritance(true);
Tools.GroupHandler.addGroupToSPList(web, SPRoleType.Reader, headOfArtists, externalNotes);
Tools.GroupHandler.removeGroupFromList(web, stageDesigners, externalNotes);
}
catch (Exception e)
{
logger.LogError("Failed to add rights", e);
}
}
的GroupHandler類是一個靜態類,它看起來是這樣的:
public static class GroupHandler
{
public static void addGroupToSPWeb(SPWeb web, SPRoleType roleType, SPGroup group)
{
try
{
SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group);
SPRoleDefinition roleDefinitionRead = web.RoleDefinitions.GetByType(roleType);
roleAssignment.RoleDefinitionBindings.Add(roleDefinitionRead);
web.RoleAssignments.Add(roleAssignment);
}
catch (Exception e)
{
logger.LogError("Failed to add rights", e);
}
}
public static void addGroupToSPList(SPWeb web, SPRoleType roleType, SPGroup group, SPList list)
{
try
{
SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group);
SPRoleDefinition roleDefinitionRead = web.RoleDefinitions.GetByType(roleType);
roleAssignment.RoleDefinitionBindings.Add(roleDefinitionRead);
//list.RoleAssignments.Remove(group);
list.RoleAssignments.Add(roleAssignment);
}
catch (Exception e)
{
logger.LogError("Failed to add rights", e);
}
}
public static void removeGroupFromList(SPWeb web, SPGroup group, SPList list)
{
try
{
list.RoleAssignments.Remove(group);
}
catch (Exception e)
{
logger.LogError("Failed to add rights", e);
}
}
}
的問題
當我創建一個包含此事件接收器模板,事件接收器的子網站只拋棄我想分配給特定列表的組(在上面的示例中,「生產負責人和」後勤經理「)。我無法調試任何內容,因爲它是在線Sharepoint,並且在我的沙盒解決方案測試環境中一切正常。