2012-07-04 6 views
0

TFS 이벤트 구독 서비스를 사용하여 웹 인터페이스를 통해 구독을 동적으로 만들려고합니다. 구독은 중간 계정으로 이동합니다. 우리의 목적을 위해 두 개의 계정을 "관리자가 아닌 사용자"및 "구독 저장소"라고합니다.Team Foundation Server 2010 웹 액세스에서 가장을 (를) 깰 수 없습니다.

관리자는 "구독 저장소"계정에 대한 경고를 만들 수 있으며 구독 저장소 계정은 자체에 대한 경고를 만들 수 있지만 관리자가 아닌 사용자는 저장소 계정에 구독을 만들 수 없습니다.

나 '코드를 편집 :

액세스 거부 :이 작업을 수행 할 수있는 {사용자 계정 이름이} 자원 $ 구독에 다음의 액세스권 (들)을 필요로 나는 다음과 같은 오류 메시지가 나타납니다 사용하는 경우 :

IEventService eventService = (IEventService)this.tfsCollection.GetService(typeof(IEventService)); 
eventService.SubscribeEvent(userAccountIdentity.Sid, Strings.WorkItemChangedEvent, string.Format(Strings.Condition0, workItem.ToString(CultureInfo.InvariantCulture)), deliveryPreference, string.Format(Strings.AlertTag0, workItem.ToString(CultureInfo.InvariantCulture))); 

모든 매개 변수가 정확하며이 값과 관련없는 내용이므로이 토론에 사용하지 마십시오. :) tfsCollection은 페이지의 Connection.TeamProjectCollection 속성에서 가져 오는 TfsTeamProjectCollection 개체입니다.

내 첫번째 생각은 (이 경우, NetworkService와의) 서비스 계정을 사용할 수 있도록 가장 휴식, 그래서 다음 I는 Action 소요 도용없이 행하는 확장 방법을 만들었다 :

public static void WithoutImpersonation(this Action actionToPerform) 
    { 
     using (var ctx = WindowsIdentity.Impersonate(IntPtr.Zero)) 
     { 
      try 
      { 
       actionToPerform(); 
      } 
      finally 
      { 
       ctx.Undo(); 
      } 
     } 
    } 

Action (가장 가까운 사용자 계정 인 WindowsIdentity.GetCurrentUser()이 NetworkService 계정을 반환하는지 확인) 동안이 가장이 올바르게 손상되지만 동일한 오류로 이벤트 구독을 만들지 못합니다. TfsTeamProjectCollection의 인증 된 사용자는 NetworkService 계정입니다.

답변

1

해결했습니다. 내가 잘못 접근하고있는 것으로 나타났습니다. 수업을 인스턴스화 한 페이지에서 EnterTfsImpersonationContext을 사용한 다음 저장소 계정의 ID를 조회하고 계정에 대해 새 TfsTeamProjectCollection을 만듭니다. 그것은 그 문제를 해결했습니다.