Оповещение Sharepoint в сети Создать

В настоящее время мы работаем над проектом, который включает sharepoint. Мы создали шаблонную сеть, которая содержит определенный контент, который мы хотели бы дублировать каждый раз при создании новой сети. Мы настроили создание пользовательского веб-элемента управления, работающего в веб-части. Это создает сеть из шаблона, устанавливает необходимые разрешения и добавляет некоторые функции.

Эта проблема:

Мы хотели бы настроить оповещение для группы безопасности с поддержкой электронной почты DOMAIN\sharepoint. Мы используем этот код VB.Net:

Dim user As SPUser = w.EnsureUser("DOMAIN\sharepoint")
Dim alert As SPAlert = w.Alerts.Add()
alert.User = user
alert.AlertType = SPAlertType.List
alert.List = w.Lists("Information")
alert.Title = w.Title & " - " & alert.Title
alert.Properties("eventtypeindex") = "2"
alert.AlertFrequency = SPAlertFrequency.Daily
alert.Update(False)

Это работает для пользователей, которые являются администраторами домена, но не работает для людей, которые имеют полный контроль только на уровне этого сайта. Однако они могут войти и вручную добавить оповещение после создания сайта. У меня нет никаких проблем при создании этого с моим собственным логином, но я являюсь членом администраторов домена и, следовательно, администратором всех сайтов sharepoint. Ошибка, которую получают только пользователи, имеющие полный доступ к этому сайту, - ошибка "Отказано в доступе".

Редактировать: я никогда не говорил, что я хотел из этого. Я хотел бы знать, есть ли способ обойти это или я могу создать EventReceiver некоторого вида, для которого, когда сама сеть создана, чтобы добавить предупреждение.

РЕДАКТИРОВАТЬ 2:

Я изменил код на следующий, и теперь я получаю ошибку

Dim authorizedCode As SPSecurity.CodeToRunElevated = New SPSecurity.CodeToRunElevated(AddressOf AddAlert)
SPSecurity.RunWithElevatedPrivileges(authorizedCode)

Dim new_site As New SPSite(SPContext.Current.Site.ID, sysToken)
Dim web As SPWeb = new_site.AllWebs(w.ID)
Dim user As SPUser = web.EnsureUser("DOMAIN\sharepoint")
Dim alert As SPAlert = web.Alerts.Add()
alert.User = user
alert.AlertType = SPAlertType.List
alert.List = web.Lists("Information")
alert.Title = web.Title & " - " & alert.Title
alert.Properties("eventtypeindex") = "2"
alert.AlertFrequency = SPAlertFrequency.Daily
alert.Update(False)

куда sysToken получается в

Public Sub AddAlert()
    Dim lolcatKiller As SPSite = New SPSite(SPContext.Current.Site.ID)
    sysToken = lolcatKiller.SystemAccount.UserToken
End Sub

Но я получаю исключение

System.Runtime.InteropServices.COMException: The security validation for this page is invalid.

Насколько я могу судить, я все еще в контексте systemuser

3 ответа

Действительно, есть обходной путь. Оберните код с помощью RunWithElevatedPrivileges.

Для этого исключения используйте: web.AllowUnsafeUpdates = true;

Для SP2010 я смог исправить это, убедившись, что заполнитель "PlaceholderFormDigest" не находится в разделе скрытых заполнителей

Они должны быть на странице и работать:

  <asp:ContentPlaceHolder id="PlaceHolderFormDigest" runat="server">    <SharePoint:FormDigest runat="server" />    </asp:ContentPlaceHolder>    <input type="text" name="__spText1" title="text" style="display:none;" />  <input type="text" name="__spText2" title="text" style="display:none;" />
Другие вопросы по тегам