2 つの異なる管理パス (部門とオフィス) の下に多数のサイト コレクションを持つ SharePoint Web アプリケーションがあります。
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 秒かかります。
理想的には、ユーザーがアクセスできるかどうかを確認するためにすべてのサイト コレクションを反復処理するのではなく、ユーザーを使用してユーザーがアクセスできるサイト コレクションを確認することです。これは達成できますか?
ありがとう
イーグス