2010-02-08 2 views

답변

4

프로그래밍 방식으로 하시겠습니까?

SPSite.AllWebs

사용

최상위 사이트와 하위 사이트를 포함하여 사이트 모음에 포함 된 모든 웹 사이트 의 컬렉션을 가져옵니다 SPSite.AllWebs 속성입니다. 사용자를위한 그러나

, 당신은 아마 UnauthorizedAccessException를 얻을 것이다 (당신이 상승 된 권한으로 DropDownList로 채울 선택하지 않는,하지만 그건 당신이 드롭 다운 함께 할 수 wan't 무엇에 의존하는 경우) 때문에 모든 사람이 모든 웹을 열거 할 권한이있는 것은 아닙니다.

이 경우 SPWeb.GetSubwebsForCurrentUser

, 당신은

현재 사용자가 구성원 인 의 현재 웹 사이트 아래에 하위 사이트 의 컬렉션을 반환하는 것이 SPWeb.GetSubwebsForCurrentUser 방법 사용합니다.

그러나이 방법은 현존하는 서브 사이트 만 반환합니다 (즉, 1 레벨 깊이, 즉 현재 웹). 당신은

당신은 당신이 얻을 각 SPWeb에 다음 SPSite.AllWebs 전화 SPSecurity.RunWithElevatedPrivileges를 사용할 수 있습니다 ...

추천 I`d 재귀 루프에 필요 찾은 각 SPWeb에 GetSubWebsForCurrentUser 전화 .. 잘못을 것입니다, 확인 사용자가 권한을 필요로하는 경우, 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(); 
       } 
      } 
     } 
    }); 
: 코드에서

, 그것은 다음과 같이 보입니다