Назад | Перейти на главную страницу

Предупреждение 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.

Насколько я могу судить, я все еще нахожусь в контексте системного пользователя

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

Для 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;" />

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