我正在嘗試使用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帳戶。