MOSS的权限控制很好很强大的
SPWeb web = SPControl.GetContextWeb(Context);
//获取当前站点下的所有子站点
SPWebCollection subwebs = web.Webs;
foreach(SPWeb wb in subwebs)
{....}
END
当前用户为普通读者身份!!可以看每个子网站下的子网站的子网站。。。
结果:失败!
SPSecurity.RunWithElevatedPrivileges(delegate
{
SPWeb web = SPControl.GetContextWeb(Context);
//获取当前站点下的所有子站点
SPWebCollection subwebs = web.Webs;
foreach(SPWeb wb in subwebs)
{....}
});
还是失败,失败地点:web.Webs;
提示:没有权限,验证失败!
最后修改版本:
SPSecurity.RunWithElevatedPrivileges(delegate
{
using (SPWeb wb = new SPSite(web.Site.ID).OpenWeb(web.ID))
{
//获取当前站点下的所有子站点
SPWebCollection subwebcol = wb.Webs;
for (int i = 0; i < subwebcol.Count; i++)
{
if (i < subwebupcount)
{
if (subwebcol[i].DoesUserHavePermissions(SPBasePermissions.Open))
{
subleftnav(subwebcol[i], "navLevel2", "navItem", web.ID);
subwebcol[i].Dispose();
}
}
}
}
});
结果:成功!
总结:必须在提升权限下New一个新的Contex上下文,再去干你想干的事情,如上黑体标示,第二个可以不要的!
感慨:MOSS的权限控制很弓虽大!