2013-04-24 67 views
2




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

回答

0

我的建议是,不要将沙盒解决方案与托管代码一起使用,但要使用SharePoint应用程序模型项目来执行SharePoint托管或提供程序托管......主要是因为您使用的方法已被弃用,像你所说的那样调试。 提供程序托管也许更容易,因为您可以在MVC或Web窗体项目中使用托管代码CSOM来执行此操作。然后,您可以非常轻松地使用远程事件接收器并进行调试。在codeplex上的Office AMS示例中,有一个示例项目显示了如何使用远程事件接收器,并在Visual Studio 2013 http://officeams.codeplex.com/中利用Azure Service Bus方法实时调试它。 同样在该代码示例下载中也有一个管理App模型中的安全性的示例,因此您应该很好。

相关问题