2013-11-04 63 views
0


我們有有一些網站集的下面2條不同的管理路徑SharePoint Web應用程序(科指南&辦事處)如的SharePoint獲取網站集當前用戶

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

當用戶登錄時,他們會看到他們擁有讀取權限的網站集列表以下C#代碼是在web部件

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

     } 
    }); 

它工作正常,但在生產中需要20秒來加載web部件(我們有跨越2條路徑700個站點集合)。

我已經使用緩存來保存其網站列表,但一旦緩存過期,需要20秒才能重新生成自己。

理想情況下,我想要查看用戶可以使用用戶訪問的網站集,而不是遍歷所有網站集以查看用戶是否有權訪問它們。這可以實現嗎?

感謝

eaigs

+0

我們也有一個負載均衡的農場,所以每次用戶放到不同的服務器上時,緩存都需要重新創建。 – ASG

回答

0

嘗試使用SPWeb.GetSubwebsForCurrentUser方法來獲取當前網站,目前用戶是其成員下方的子網站。

+0

當我可以得到一個SPWeb的時候,所有的努力工作都完成了。這隻會讓我回到該網站集中的網站列表,但我需要網站集本身 – ASG

相關問題