Desabilitar a limitação de lista por meio do modelo de objeto de servidor
-
29-09-2020 - |
Pergunta
Quero desativar a otimização da lista por meio do código, por isso escrevi o seguinte código
SPList lstBookings = web.Lists.TryGetList("Bookings");
lstBookings.EnableThrottling = false;
Mas isso exige que o código seja executado com privilégios elevados, porque se eu fizer login como um usuário não administrador, ocorrerá um erro, não é possível fazer login.
Alguém tem alguma ideia?
Obrigado.
Solução
EnableThrottling parece exigir privilégios de administrador de farm.Dê uma olhada no seguinte código:
public bool EnableThrottling
{
get { ... }
set
{
bool nothrottlevalue = !value;
this.SetListNoThrottle(nothrottlevalue);
}
}
internal void SetListNoThrottle(bool nothrottlevalue)
{
SPSite site = this.ParentWeb.Site;
if (!site.WebApplication.Farm.CurrentUserIsAdministrator(true))
SPGlobal.HandleUnauthorizedAccessException(new UnauthorizedAccessException());
else
{ ... }
}
A conta do sistema, por sua vez, tem privilégio de Administrador do Conjunto de Sites.O SPSecurity.RunWithElevatedPrivileges permite executar código sob a identidade do pool de aplicativos, que tem os mesmos privilégios de administrador do conjunto de sites em todos os conjuntos de sites.
Outras dicas
Execute este trecho de código como usuário de identidade do pool de aplicativos:
SPSecurity.RunWithElevatedPriveleges( () => {
using (var site = new SPSite(SPContext.Current.Site.ID))
{
var web = site.RootWeb;
var lstBookings = web.Lists.TryGetList("Bookings");
lstBookings.EnableThrottling = false;
lstBookings.Update();
}
});