Программно назначать права на 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/. Кроме того, в этой загрузке примеров кода есть пример управления безопасностью и в модели приложения, так что вы должны быть готовы.