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的权限控制很弓虽大!
   
posted @ 2008-06-18 16:10  pccai  阅读(1406)  评论(5编辑  收藏  举报