1


我们有一个 SharePoint Web 应用程序,它在 2 个不同的托管路径(部门和办公室)下有许多网站集,例如

http://sharepoint.abc/depts/finance
http://sharepoint.abc/depts/isg
http://sharepoint.abc/offices/boston
http://sharepoint.abc/offices/chicago

当用户登录时,他们会看到一个网站集列表,他们可以使用 WebPart 中的以下 c# 代码读取访问权限

 SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite spSite = new SPSite(SPContext.Current.Site.Url))
        {
            foreach (SPSite site in spSite.WebApplication.Sites)
            {
                try
                {
                    var rootWeb = site.RootWeb;
                    if (rootWeb.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.ViewPages))
                    {
                        if (this.ValidSite(rootWeb.Url))
                        {
                            string url = GetRelativePath(rootWeb.Url);
                            allowedSites.Add(new SiteInfo(rootWeb.Title, url));
                        }
                    }
                }
                catch (Exception ex)
                {
                    this.Controls.Add(new LiteralControl("<br/>GetAllowedSites Error: " + ex.Message));
                }
            }

        }
    });

它工作正常,但在生产中加载 web 部件需要 20 秒(我们在 2 个路径上有 700 个网站集)。

我已经使用缓存来保存他们的站点列表,但是一旦缓存过期,它需要 20 秒才能重新生成。

理想情况下,我想要查看用户可以使用 User 访问哪些网站集,而不是遍历所有网站集以查看用户是否有权访问它们。这能达到吗???

谢谢

鹰眼

4

1 回答 1

0

尝试使用SPWeb.GetSubwebsForCurrentUser方法获取当前用户所属的当前网站下的子网站。

于 2013-11-04T12:10:44.847 回答