Sharepoint List权限奇怪的行为

时间:2013-09-03 10:31:40

标签: c# sharepoint sharepoint-2010

我有一个共享点列表,我想获取我的数据,但当我尝试通过代码访问它时,它告诉我“访问被拒绝”和“提升权限”我可以看到我有614项(通过使用项目。其中的ItemCount不是items.count)但是当我试图得到它们时我不能。

这是我正在使用的代码

SPSecurity.RunWithElevatedPrivileges(delegate()
{
  using(SPSite site = new SPSite("http://mysite/"))
  {
    using(SPWeb web = site.OpenWeb())
    {
    SPQuery query = new SPQuery();
    SPList list = web.Lists["mylist"];
    SPListItemCollection items = list.Items;
    for (int i = 0;i <list.ItemCount; i++)
    {
      Console.WriteLine(items[i].Name);
    }
    }
  }
});

我也试过像这样使用getitems(查询)

SPListItemCollection items = list.GetItems(query);

结果是一样的。 (请注意,查询在CAML Builder中有效)

1 个答案:

答案 0 :(得分:1)

SPSecurity.RunWithElevatedPrivileges块中的代码在您的Web应用程序的应用程序池帐户下运行。在大多数情况下,此权限应足以克服所有安全限制。

在您的情况下,如果应用程序池帐户没有该网站集的任何权限,它将拒绝访问。我建议尝试模拟网站集管理员,如下所示,

SPUserToken token = oWeb.AllUsers["[AdministratorLoginName]"].UserToken;
using(SPSite site = new SPSite("http://mysite/",token))
  {
    using(SPWeb web = site.OpenWeb())
    {
    SPQuery query = new SPQuery();
    SPList list = web.Lists["mylist"];
    SPListItemCollection items = list.Items;
    for (int i = 0;i <list.ItemCount; i++)
    {
      Console.WriteLine(items[i].Name);
    }
    }
  }