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

C# SharePoint中特定网站的用户权限检查,c#,sharepoint,sharepoint-2010,sharepoint-api,C#,Sharepoint,Sharepoint 2010,Sharepoint Api,我需要检查特定用户是否可以通过编程方式访问SharePoint中的网站/子网站 注意:登录用户可以访问我的SharePoint站点中的几个站点。所以我必须只显示用户有权限访问的站点 我用过: using (SPWeb web = new SPSite(url).OpenWeb()) { SPWebCollection Sites = web.Webs; foreach (SPW

我需要检查特定用户是否可以通过编程方式访问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);
作为:

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


如果您使用的是发布网站,则应依赖于
门户网站Approvider
组合导航站点地图提供程序
当前导航站点地图提供程序
全球导航站点地图提供程序
网站项目Approvider
,等等,具体取决于您的导航需要)因为这一个已经完全安全地修剪,您将能够以最佳性能遍历整个树

否则,应在SPWeb对象上使用
GetSubwebsForCurrentUser()
,此方法将仅返回当前用户可访问的子站点


希望能有所帮助。

您是否试图列出用户有权访问的所有网站和子网站?请详细说明一下。是的。。我有多个用户。很少有用户可以访问所有站点,很少有用户不能访问。在显示之前,我需要检查用户对当前站点的权限。因此,我不应该显示登录用户无权访问的站点。对于这种方法,我尝试了上面提到的代码,但得到了错误。