我们有一个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