我正在为他登录的用户迭代当前的sharepoint网站集,并显示他已阅读的网站名称并为网站提供权限,这很正常。
与此同时,我必须迭代Mysites网站集,其中已阅读并提供权限。当我在Mysites网站集子网站上做foreach(SPWeb jweb in esite.AllWebs)时。它抛出错误“拒绝访问”。
但是当我在浏览器上输入网址时,他可以看到那些网站?我在SPSecurity中添加了代码.RunWithElevatedPrivileges仍然无法访问这些网站。这个_layout文件夹页面和我只在aspx页面中编写代码。
如何解决这个问题?
SPSite site = SPContext.Current.Web.Site; // http://committees.test.com
SPUser user = SPContext.Current.Web.CurrentUser;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite esite = new SPSite(site.ID))
{
Control cont5 = this.LoadControl("/_CONTROLTEMPLATES/ALERTUC/uc5.ascx");
cont5.ID = "GLOBE";
RadioButtonList glbrbl = (RadioButtonList)cont5.FindControl("RBList5");
try
{
glbrbl.SelectedValue = user.Notes.ToString();
}
catch (Exception) { }
GlobalPnl.Controls.Add(cont5);
foreach (SPWeb jweb in esite.AllWebs)
{
if (!jweb.IsRootWeb)
{
if (jweb.GetSubwebsForCurrentUser().Count != 0)
{
if (jweb.ParentWeb.ID == jweb.Site.RootWeb.ID)
{
getsubweb(jweb, Panel1, user);
}
}
}
}
}//using
using (SPSite esite = new SPSite("http://mysitesdev.test.com/groups/grp"))
{
foreach (SPWeb jweb in esite.AllWebs) //**Access Denied**
{
if (!jweb.IsRootWeb)
{
if (jweb.GetSubwebsForCurrentUser().Count != 0)
{
if (jweb.ParentWeb.ID == jweb.Site.RootWeb.ID)
{
getsubweb(jweb, Panel1, user);
}
}
}
}
}
});
答案 0 :(得分:1)
根据您的评论,RunWithElevatedPrivileges在http://committees.test.com
上以应用程序池的身份运行,但正在尝试访问http://mysitesdev.test.com
上的网站集。两个Web应用程序是否使用相同的应用程序池标识?除非http://committees.test.com
上的应用程序池标识具有http://mysitesdev.test.com/groups/grp
的权限,否则我会发现访问被拒绝错误。
答案 1 :(得分:0)
您正在使用提升的权限为运行之外的每个人运行您的权限,因此它仍然在用户的安全上下文中运行。