Accesso ai valori di ricerca non riesce con eccezioni quando l'utente collegato non è l'amministratore di SharePoint raccolta siti

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/11693

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;
    }
È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top