【问题标题】:User permission check for a particular site in SharePointSharePoint 中特定网站的用户权限检查
【发布时间】:2011-12-15 09:53:06
【问题描述】:

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

【问题讨论】:

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

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


【解决方案1】:

如果您使用的是发布站点,您应该依赖 PortalSiteMapProvider(CombinedNavSiteMapProvider、CurrentNavSiteMapProvider、GlobalNavSiteMapProvider、WebSiteMapProvider 等,具体取决于您的导航需求),因为这已经是完全安全明智地修剪,您将能够以最佳性能遍历整个树。

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

希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 2011-06-17
    • 2020-04-27
    • 2011-04-17
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多