我正在使用Sharepoint中的自定义模板在线,我想
创建子网站时自动将组分配给列表。我做了什么:
当创建子网站时,将触发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在线,一切都在我的Sandbox Solutions测试环境中运行良好。
答案 0 :(得分:0)
我的建议是不要将沙盒解决方案与托管代码一起使用,而是使用SharePoint App Model项目将其作为SharePoint托管或提供商托管...这主要是因为您使用的方法已被弃用且可以&#39像你所说的那样进行调试。 提供者托管可能更容易,因为您可以在MVC或Web窗体项目中使用托管代码CSOM来执行此操作。然后,您可以非常轻松地使用远程事件接收器并进行调试。在codeplex上的Office AMS示例中,有一个示例项目,它展示了如何使用远程事件接收器,并在Visual Studio 2013 http://officeams.codeplex.com/中利用Azure Service Bus方法实时调试它。 另外在代码示例下载中也有一个在App Model中管理安全性的例子,所以你应该好好去。