Existe uma evasão de fato. Envolva o código com RunWithElevatedPrivileges .
No momento, estamos trabalhando em um projeto que envolve sharepoint. Criamos uma web de modelo e que contém conteúdo específico que gostaríamos de duplicar toda vez que criamos uma nova web. Nós configuramos um controle de usuário da Web para criação em uma Web Part. Isso cria a web a partir do modelo, configura as permissões necessárias e adiciona alguns recursos.
O problema:
Gostaríamos de ter uma configuração de alerta para um grupo de segurança habilitado para email DOMAIN \ sharepoint. Estamos usando este código 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)
Isso funciona para usuários que são administradores de domínio, mas não funciona para pessoas que têm controle total somente no nível deste site. No entanto, eles podem entrar e adicionar manualmente o alerta quando o site é criado. Eu não tenho nenhum problema ao criar isso com o meu próprio login, mas eu sou um membro de administradores de domínio e, portanto, um administrador de todos os sites do sharepoint. O erro que os usuários que têm controle total deste site só recebe é um erro de acesso negado.
Edit: Eu nunca realmente disse o que eu queria disso. Gostaria de saber se existe uma maneira de contornar isso ou se posso criar um eventReceiver de algum tipo para quando a própria web for criada para adicionar o alerta.
EDIT 2:
Alterei o código para o seguinte e agora estou recebendo um erro
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)
Onde sysToken
é obtido em
Public Sub AddAlert()
Dim lolcatKiller As SPSite = New SPSite(SPContext.Current.Site.ID)
sysToken = lolcatKiller.SystemAccount.UserToken
End Sub
Mas estou recebendo a exceção
System.Runtime.InteropServices.COMException: The security validation for this page is invalid.
Tanto quanto eu posso dizer ainda estou dentro do contexto do systemuser
Existe uma evasão de fato. Envolva o código com RunWithElevatedPrivileges .
para essa exceção use: web.AllowUnsafeUpdates = true;
Para o SP2010, consegui corrigi-lo, certificando-me de que o espaço reservado "PlaceholderFormDigest" não estava na seção de espaços reservados ocultos
Estes precisam estar na página e funcionando:
<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;" />
Tags asp.net sharepoint alerts vb