2012-07-04 55 views
0

我正在嘗試使用TFS事件訂閱服務通過Web界面動態創建訂閱。訂閱將轉到中間賬戶。出於我們的目的,我們將調用兩個帳戶「非管理員用戶」和「訂閱存儲」。無法中斷Team Foundation Server 2010 Web Access中的模擬

管理員可以爲「訂閱存儲」帳戶創建警報,而訂閱存儲帳戶可以爲自己創建警報,但非管理員用戶無法在存儲帳戶中創建訂閱。我收到以下錯誤信息:

訪問被拒絕:{用戶帳戶名}需要的資源$認購以下權限(S):執行此操作:編輯

我的代碼m使用的是:

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對象。

我首先想到的是打破模擬,以便它使用服務帳戶(在這種情況下,網絡服務),所以我提出,需要一個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,然後查看存儲帳戶的身份併爲該帳戶創建一個新的TfsTeamProjectCollection。這解決了問題。

相關問題