SharePoint获取当前用户的网站集

时间:2013-11-04 12:04:04

标签: sharepoint sitecollection


我们有一个SharePoint Web应用程序,在2个不同的管理路径(depts& office)下面有许多站点集合,例如

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));
                }
            }

        }
    });

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

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

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

由于

eaigs

1 个答案:

答案 0 :(得分:0)

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