SharePoint中特定网站的用户权限检查

时间:2011-05-25 13:24:16

标签: c# sharepoint sharepoint-2010 sharepoint-api

我需要检查特定用户是否可以通过编程方式访问SharePoint中的网站/子网站。

注意:登录用户可以访问我的SharePoint网站中的少数网站。所以我必须只显示用户有权限的网站。

我用过:

   using (SPWeb web = new SPSite(url).OpenWeb())
                {
                    SPWebCollection Sites = web.Webs;

                    foreach (SPWeb website in Sites)
                    {
                        SPUser loginUser = website.CurrentUser;
                        string username = loginUser.Name;
                        if (!website.IsRootWeb)
                        {
                            SPWebCollection subsites = website.Webs;
                            foreach (SPWeb supersubsite in subsites)
                            {

                                SPWebCollection thirdlevelsites = supersubsite.Webs;
                                foreach (SPWeb thirdlevel in thirdlevelsites)
                                {

thirdlevel.Site.CatchAccessDeniedException = false;
                                bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);
                                if (check)
                                {
                                }
                                thirdlevel.Site.CatchAccessDeniedException = true;                                   
                                }

                            }
                        }
                    }
                }

但在

处收到错误
bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);

as:

  

访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))

1 个答案:

答案 0 :(得分:2)

如果您正在使用发布网站,则应依赖PortalSiteMapProviderCombinedNavSiteMapProviderCurrentNavSiteMapProviderGlobalNavSiteMapProviderWebSiteMapProvider等取决于在您的导航需求上)因为这个已经完全安全地修剪了,你将能够以最佳性能遍历完整的树。

否则,您应该在SPWeb对象上使用GetSubwebsForCurrentUser(),此方法只会返回当前用户可访问的子网站。

希望它会有所帮助。