Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 以编程方式在sharepoint online中分配权限_Templates_Sharepoint_Office365_Feature Activation - Fatal编程技术网

Templates 以编程方式在sharepoint online中分配权限

Templates 以编程方式在sharepoint online中分配权限,templates,sharepoint,office365,feature-activation,Templates,Sharepoint,Office365,Feature Activation,我正在Sharepoint online中使用自定义模板,我想 创建子网站时自动将组指定给列表。我所做的: 在Visual Studio中创建了一个模板 在最后一个功能中添加了事件接收器 用下面的脚本填充featureactivated方法 应该发生的是,当创建子网站时,featureactivated方法将启动,并且指定的组将被分配其对列表的权限 public override void FeatureActivated(SPFeatureReceiverProperties pr



我正在Sharepoint online中使用自定义模板,我想 创建子网站时自动将组指定给列表。我所做的:

  • 在Visual Studio中创建了一个模板
  • 在最后一个功能中添加了事件接收器
  • 用下面的脚本填充featureactivated方法
应该发生的是,当创建子网站时,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 online,并且在我的沙盒解决方案测试环境中运行良好。

我的建议是不要使用带有托管代码的沙盒解决方案,而是使用Sharepoint应用程序模型项目作为Sharepoint宿主或提供商宿主来完成此操作…主要是因为您使用的方法是ng已弃用,无法按照您所述进行调试。 提供程序托管可能是一个更简单的跳转,因为您可以在MVC或Web窗体项目中使用托管代码CSOM来完成此操作。然后,您可以非常轻松地使用远程事件接收器并调试到其中。在codeplex上的Office AMS示例中,有一个示例项目展示了如何使用远程事件接收器,以及如何利用Azure服务对其进行实时调试Visual Studio 2013中的ce总线方法。 另外,在下载的代码示例中,还有一个管理应用程序模型中安全性的示例,因此您应该可以开始了