0

我正在尝试修复一些将项目插入 SharePoint 列表的代码(我没有编写)。问题是代码适用于匿名用户,但如果用户通过 ASP.NET 表单身份验证登录,则在调用 SPListItem 的 Update 方法时会收到 UnauthorizedAccessException。当它工作时,作为匿名用户,我可以看到 SPListItem 的 SPWeb 的 SPUser 是 SharePoint 系统帐户。但是当用户使用表单身份验证登录时,SPUser 为空。有人可以解释这种行为以及如何解决它吗?

最初只有最上面的代码块位于 RunWithElevatedPrivileges 委托中,但我尝试将其全部移到内部。一旦我开始工作,我将插入一些 using 块:

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();
        });
4

1 回答 1

0

感谢@AlexeiLevenkov,我发现这不起作用,因为我使用的是使用默认权限创建的 SP 对象的现有实例。作为代码什么都不做的证明,当以匿名用户身份运行时,即使没有 RunWithElevatedPrivileges 调用,代码也会成功。我做了这个改变,它照顾它。

SPSecurity.RunWithElevatedPrivileges(delegate()
{
     rootWeb = new SPSite(SPContext.Current.Site.ID).RootWeb;

非常感谢!

于 2012-10-08T22:41:38.443 回答