我正在使用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,并且在我的沙盒解决方案测试环境中一切正常。