我们有一个 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 访问哪些网站集,而不是遍历所有网站集以查看用户是否有权访问它们。这能达到吗???
谢谢
鹰眼