2010-02-08 48 views

回答

4

以編程方式您是指?

SPSite.AllWebs

使用SPSite.AllWebs屬性,

獲取包含在網站 集內的所有網站 ,包括頂級 網站及其子的集合。

然而,爲你的用戶,你可能只得到UnauthorizedAccessException(如果你不選擇填充的DropDownList使用提升的權限,但是這取決於你是什麼wan't與下拉做),因爲不是每個人都有權枚舉所有網頁。

SPWeb.GetSubwebsForCurrentUser

在這種情況下,你使用SPWeb.GetSubwebsForCurrentUser方法

返回子網站 當前網站其中 的當前用戶是其成員之下的集合。

但是,這種方法只返回子網beneatath(1層深,即)當前網絡。您將需要遞歸循環,並呼籲GetSubWebsForCurrentUser每個的SPWeb你發現.. ERR

I`d建議...

你可以使用SPSecurity.RunWithElevatedPrivileges調用SPSite.AllWebs,那麼你得到的每個的SPWeb,檢查如果用戶需要權限,如果是,則將項目添加到DropDownList。

在代碼中,它看起來是這樣的:

DropDownList ddl = new DropDownList(); 
    SPUser currentUser = SPContext.Current.Web.CurrentUser; 

    SPSecurity.RunWithElevatedPrivileges(delegate() 
    { 
     using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.ID)) //you MUST create new SPSite instance 
     { 
      SPWebCollection elevatedWebs = elevatedSite.AllWebs; 
      foreach (SPWeb elevatedWeb in elevatedWebs) 
      { 
       try 
       { 
        if (elevatedWeb.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.ViewPages)) 
         ddl.Items.Add(new ListItem(elevatedWeb.Title, elevatedWeb.ID.ToString())); 
       } 
       finally 
       { 
        if (elevatedWeb != null) 
         elevatedWeb.Dispose(); 
       } 
      } 
     } 
    });