Программно назначать права на sharepoint онлайн



Я работаю с пользовательскими шаблонами в Sharepoint Online и хочу автоматически назначать группы спискам при создании дочернего сайта. Что я сделал:

  • Создал шаблон в Visual Studio
  • Добавлен приемник событий для последней функции
  • Заполнил метод featureactivation приведенным ниже сценарием

Что должно произойти, так это то, что при создании дочернего сайта будет активирован метод featureacactive и указанные группы получат свои права на список.

    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.

1 ответ

Я бы рекомендовал не использовать изолированное решение с управляемым кодом, а использовать проект модели приложения SharePoint, чтобы сделать это либо в качестве хостинга SharePoint, либо хостинга провайдера... в основном потому, что используемый вами подход устарел и не может быть отлажен, как Вы заявили. Хостинг провайдера может быть проще, поскольку вы можете использовать CSOM с управляемым кодом здесь, в проекте MVC или Web Forms, чтобы сделать это. Затем вы можете очень легко использовать Remote Event Reciever и отлаживать его. В примерах Office AMS для codeplex приведен пример проекта, который показывает, как использовать удаленный приемник событий, а также отлаживать его в режиме реального времени, используя подход Azure Service Bus в Visual Studio 2013 http://officeams.codeplex.com/. Кроме того, в этой загрузке примеров кода есть пример управления безопасностью и в модели приложения, так что вы должны быть готовы.

Другие вопросы по тегам