J'essaie de corriger un code (que je n'ai pas écrit) qui insère un élément dans une liste SharePoint. Le problème est que le code fonctionne pour les utilisateurs anonymes, mais si l'utilisateur est connecté via l'authentification par formulaires ASP.NET, il obtient une exception UnauthorizedAccessException lors de l'appel de la méthode Update de SPListItem. Quand cela fonctionne, en tant qu'utilisateur anonyme, je peux voir le SPUser de SPWeb SPListItem est le compte système SharePoint. Mais lorsque l'utilisateur est connecté avec l'authentification par formulaires, le SPUser est null. Quelqu'un peut-il expliquer ce comportement et comment le réparer? À l'origine, seul le bloc de code supérieur se trouvait dans le délégué RunWithElevatedPrivileges, mais j'ai essayé de tout déplacer à l'intérieur. Je vais insérer quelques blocs à l'aide une fois que je le faire fonctionner:SPListItem.Update throws UnauthorizedAccessException pour l'utilisateur Forms authentifié
SPSecurity.RunWithElevatedPrivileges(delegate()
{
rootWeb = SPContext.Current.Site.RootWeb;
rootWeb.AllowUnsafeUpdates = true;
currentWeb = SPContext.Current.Web;
currentWeb.AllowUnsafeUpdates = true;
try
{
// Get site information
SPList franDir = rootWeb.GetList("/Lists/Directory");
SPQuery query = new SPQuery();
query.Query = "<Where><Eq><FieldRef Name='Subsite'/><Value Type='Text'>" + currentWeb.Name +
"</Value></Eq></Where>";
SPListItemCollection items = franDir.GetItems(query);
SPList l = rootWeb.GetList("/Lists/Request");
SPListItem li = l.Items.Add();
li["Location"] = siteName;
//...set more fields
li.Update();
}
catch (Exception ex)
{
rootWeb.Dispose();
logger.ErrorException("An error occured adding item", ex);
throw ex;
}
rootWeb.Dispose();
});
C'est une manière inutile d'utiliser 'RunWithElevatedPrivileges' - vous devez créer de nouveaux objets SPSite/SPWeb à l'intérieur du même siteId/webId que celui-ci pour qu'il fonctionne réellement avec des privilèges élevés. Corrigez cela et voyez si vous avez toujours un problème. –