在为匿名访问开发自定义可视Web部件时需要其他代码吗?

时间:2011-10-21 05:06:55

标签: sharepoint sharepoint-2010

我有一个简单的自定义Web部件,有三个下拉列表,可以从三个不同的列表中读取。当用户尝试访问此页面时,系统会提示他们输入密码,如果他们没有输入任何凭据,则会收到401错误。

我已经在中央管理员和网站本身启用了匿名访问,用户可以浏览到该站点并查看它而不会被提示输入密码。我确保匿名用户可以“查看”对问题列表的访问权限,但他们仍然无法查看带有自定义Web部件的任何页面。

它是SharePoint设置还是我必须在我的Web部件项目中添加内容?

提前致谢。

编辑:

我在页面加载中调用此方法仍然会出现相同的错误

private void LoadImageGallery()
{
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
    SPSite oSiteCollection = SPContext.Current.Site;
    SPWebCollection collWebsites = oSiteCollection.AllWebs;
        DataTable dt = new DataTable();
        for (int i = 0; i < collWebsites.Count; i++)
        {
            using (SPWeb oWebsite = collWebsites[i])
            {
                if (oWebsite.Title == "People")
                {
                    SPList peopleList = oWebsite.Lists["Pages"];
                    if (peopleList != null)
                    {
                        SPListItemCollection collListItems = peopleList.Items;
                        dt = collListItems.GetDataTable();
                        // Include Surname to omit default/search page
                        dt = collListItems.GetDataTable();
                        rptImageGallery.DataSource = dt;
                        rptImageGallery.DataBind();
                    }
                }
            }
        }
    });
}

我也试过

SPSite oSiteCollection = SPContext.Current.Site;
SPWebCollection collWebsites = oSiteCollection.AllWebs;

以上runwithelevated ..

我将system \ sharepoint设置为在整个网站中拥有完全控制权

2 个答案:

答案 0 :(得分:1)

自定义页面需要满足两个要求,以便匿名用户可以访问它:

  1. 它需要继承自班级UnsecuredLayoutsPageBase
  2. 需要覆盖属性AllowAnonymousAccess才能返回true

答案 1 :(得分:0)

对于匿名访问,您必须修改代码以访问List to bind下拉列表,如下所示。在 SPSecurity.RunWithElevatedPrivileges 委托方法中添加代码。

       SPSecurity.RunWithElevatedPrivileges(delegate() {
          using (SPSite site = new SPSite(web.Site.ID))
          {            
             //ADD YOUR WEB PART Code HERE     
          }
       });

重要提示:您必须在此委托中创建SharePoint对象,否则代码将无法使用管理员访问权限运行。