用户有权访问的列表中不存在AccessDenied.aspx / List

时间:2011-01-05 06:13:08

标签: sharepoint sharepoint-2007

我收到此错误:

列表不存在 您选择的页面包含一个不存在的列表。它可能已被其他用户删除。在Microsoft.SharePoint.Library.SPRequestInternalClass.GetListsWithCallback ...

不幸的是,这不是错误的未发布的母版页表现形式 - 查询字符串中的列表GUID导致根网站中的几个列表之一用于在母版页的控件中显示用户设置。

使用以下代码访问列表:

_RootWeb = SPContext.Current.Site.RootWeb;
storageList = _RootWeb.GetList(_RootWeb.Url + "/Lists/" + 
                              LocalStrings.TimeZoneStorageList.ListName);
SPListItemCollection result = list.GetItems(query);
SPListItem StorageItem = result[0];

xmlDoc.LoadXml(StorageItem[LocalStrings.TimeZoneStorageList.Fields.UserXML]
                                                                   .ToString());

当用户能够通过UI访问列表时,是否有任何可能导致该代码抛出AccessDeniedException的内容?

或者,当权限问题实际上完全位于其他地方时,SharePoint是否可以将列表报告为错误来源?

4 个答案:

答案 0 :(得分:1)

  

有什么可能导致的   抛出一个代码   用户时AccessDeniedException   能够通过访问列表   UI?

这可能不适用于您的情况,但是,我发生过这种情况:

  1. 用户没有查阅列表权限的查找字段
  2. 人员字段已过滤到所选的SharePoint组,其中用户无权查看该组的成员身份。
  3. 在这两种情况下,这些字段都没有包含在用户通常使用的视图或表单中,因此没有立即发现问题。

答案 1 :(得分:0)

您可以尝试将列表设为

_RootWeb.Lists[strListName]

其中strListName是列表的标题。

答案 2 :(得分:0)

AccessDenied.aspx上的查询字符串中的列表ID实际上可能与实际错误无关。 相关代码类似于

try {
    throw new AccessDeniedException();
    } 
catch (Exception ex) {}

storageList = _RootWeb.GetList(ListUrl);  

如果未禁用CatchAccessDeniedException,SharePoint将看到异常,尽管catch和中止线程。由于这是在另一个线程上控制的,因此它不是同步的,并且代码继续运行足够长的时间,线程在访问列表的过程中中止。

错误消息的两个部分在技术上都是正确的 - 有一个AccessDeniedException,最后一个操作是试图打开列表 - 但两者之间没有实际连接。

实际问题是mysite上的服务帐户权限,这些权限自然不会出现在任何日志或错误消息中。

答案 3 :(得分:0)

对我来说这个问题非常简单。我有一个用户对当前网站有权限,这很好。但是,页面上有一个列表Web部件我收到错误,该错误从当前用户无权访问的子站点访问项目。

在我的情况下,错误应该已读为“拒绝列表访问”。