Désactiver la liste de la liste par le biais du modèle d'objet serveur
-
29-09-2020 - |
Question
Je souhaite désactiver la liste de la liste par le biais du code de sorte que j'ai écrit le code suivant
SPList lstBookings = web.Lists.TryGetList("Bookings");
lstBookings.EnableThrottling = false;
Mais cela nécessite-t-il que le code fonctionne sous des privilèges élevés, car si je vous connecte à un utilisateur non administrateur, cela me donne une erreur ne peut pas se connecter.
Quelqu'un des idées?
merci.
La solution
Enablethrottling semble nécessiter des privilèges d'administrateur de la ferme.Jetez un coup d'œil au code suivant:
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
{ ... }
}
Le compte système, à son tour, possède un privilège d'administrateur de collecte de site.Les privilèges SPSecurity.RunWithelevated Permet d'exécuter un code sous l'identité du pool d'applications, qui a les mêmes privilèges d'administrateur de collecte de sites sur toutes les collections de sites.
Autres conseils
Exécuter ce morceau de code en tant qu'utilisateur d'identité du pool d'applications:
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();
}
});