Accesso ai valori di ricerca non riesce con eccezioni quando l'utente collegato non è l'amministratore di SharePoint raccolta siti
-
16-10-2019 - |
Domanda
In SharePoint 2010 Fondazione, dopo abbiamo installato un ricevitore semplice evento che viene eseguito soprattutto quando vengono aggiunti alcuni elementi / modificata, abbiamo notato, durante i test manuali, che se l'accesso come un utente diverso dall'amministratore di SharePoint conto otterremmo un errore ogni volta che abbiamo cercato di recuperare il recupero di una semplice informazioni colonna di ricerca. ha detto l'errore Messaggio
Error loading and running event receiver EvozonAdministrationEventReceivers.StartEmailNotification.StartEmailNotification in EvozonAdministrationEventReceivers,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=918ea4bf742b9a3a. Additional information is below.
: Value does not fall within the expected range.
Lo stesso codice eseguito su Dev o con l'amministratore connesso non ha avuto problemi in esecuzione.
Qualcuno ha idea del perché. Il server è installato Active Directory. Non ha assolutamente alcun senso per me. Sono le ricerche eseguite in un certo tipo di sandbox?
Codice parziale elenco qui sotto:
var Field = FieldResolver.On(_onBoardingChecklist);
SPSecurity.RunWithElevatedPrivileges(() =>
{
string computerType = LookupValue<Columns.ComputerType>();
// .. omitted for previty
public string LookupValue<SITECOLUMN>() where SITECOLUMN : new()
{
if (_Field == null)
_Field = FieldResolver.On(_onBoardingChecklist);
var value = (string)_onBoardingItem[_Field.For<SITECOLUMN>().InternalName];
value = new SPFieldLookupValue(value).LookupValue;
return value;
}
Soluzione
Sembra che hai un pezzo di codice nel vostro ricevitore di eventi, che richiede privilegies elevati. Si dovrebbe usare SPSecurity.RunWithElevatedPrivilegies per questo pezzo di codice.
Aggiornamento:
Inoltre, si prega di accertarsi di aver ricreato tutti gli oggetti di SharePoint all'interno il RunWithElevatedPrivilegies delegato, perché, ad esempio, questo dovrebbe funzionare:
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (SPSite site = new SPSite(properties.SiteId))
{
using (SPWeb web = site.OpenWeb(properties.RelativeWebUrl))
{
// ...
web.Update();
}
}
});
Ma questo, non sarebbe:
SPSecurity.RunWithElevatedPrivileges(() =>
{
// ...
properties.Web.Update();
});
Grazie Anders Rask per la nota importante riguardo SPContext!