无法访问团队项目中新创建的团队

时间:2017-05-10 15:22:13

标签: tfs tfs2017

问题

所以我在TFS 2017.1上运行1个团队项目 - 通过https://<hostname>:443/进行多个团队配置。

已经有一些团队拥有自己的Tfs-Groups,权限,区域路径等。 每个团队都是平等配置的:

  • 与团队成员(例如NewTeam)合作
  • 权限组(例如Contributors_NewTeam)
  • 团队的区域路径(例如,开发/新团队)

所有这些现有团队都是在2017.1之前创建的,并且按预期工作。

当我添加另一个团队并使用新用户测试访问权限时。 Tfs没有在此用户的Web访问中显示该团队:

NoTeams

使用我自己的用户,我可以很好地查看和访问团队:

MyselfTeams

当用户被添加到任何其他现有团队时,他突然可以看到新创建的团队并且也可以访问它。

配置

&#34; NewTeam&#34;的配置如下:

创建了团队并添加了用户: TeamPofile

创建Tfs-Group并根据需要设置权限: SecurityContributorsPermissions

团队继承Tfs-Group的权限: SecurityTeamPermissions

团队是Tfs-Group的成员: SecurityTeamMemberOf

Tfs-Group是&#34; Project Valid Users&#34;的成员: SecurityContributorsMemberOf

将Tfs-Group添加到区域路径,并根据需要设置权限: AreaPathSecurity

到目前为止的结果:

当查看发送的web api请求时,从tfs:

返回错误后获取组
 {
     "$id":"1",
     "InnerException":null,
     "Message":"TF14045: The identity with TeamFoundationId <guid> could not be found.",
     "TypeName":"Microsoft.VisualStudio.Services.Identity.IdentityNotFoundException, Microsoft.VisualStudio.Services.WebApi",
     "TypeKey":"IdentityNotFoundException",
     "ErrorCode":0,
     "EventId":4207
 }

一些谷歌搜索之后应该被理解为:Not found or no sufficient permissions for team.

在查看tfs服务器上的事件日志时,尝试直接通过url访问团队仪表板时出现以下错误:

Ausnahmemeldung: Object reference not set to an instance of an object. (Typ NullReferenceException)
Ausnahmestapelüberwachung:    at Microsoft.TeamFoundation.Dashboards.DashboardSecurityNamespaceHelper.GetTeamMemberGroupPermissions(IVssRequestContext requestContext, Guid teamId)
   at Microsoft.TeamFoundation.Dashboards.Services.DashboardService.GetDashboardGroup(IVssRequestContext requestContext, IDashboardConsumer dashboardConsumer)
   at Microsoft.TeamFoundation.Server.WebAccess.Presentation.DashboardsViewHelper.GetViewModel(TfsWebContext tfsWebContext)
   at Microsoft.TeamFoundation.Server.WebAccess.Presentation.DashboardsController.Index()
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

但我认为这只是网络api调用没有为团队返回任何信息以及后续调用然后传递null作为id的结果。

我尝试了什么:

  • 我多次比较......,&#34; NewTeam&#34;与现有和工作团队相匹配。因此权限应该是正确的。

  • 我尝试重启服务器

  • 我尝试通过quiesce / unquiesce重新启动tfs服务

  • 我尝试创建另一个团队,也是多次......,万一我错过了什么。

  • 我查看了tfs项目集合数据库,发现[tbl_Area]确实包含现有团队的路径,但不包含新创建的团队的路径。但我没有找到原因。

  • 我尝试使用其他测试用户,以防用户本身出现问题。

  • 研究了没有任何用处的TFS错误代码,在我看来,显示

在浪费了将近一整天的时间进行研究并试图了解我错在哪里以及我误解了什么之后我会伸出援助之手。

1 个答案:

答案 0 :(得分:0)

所以似乎每个其他团队项目和集合都表现正确。

我现在正在重用现有的和正在运行的tfs组,并且直接向团队而不是tfs组授予权限。所以我可以为每个团队保留不同的权限,但对于团队项目本身,因为所有团队共享相同的tfs组。

我希望TFS 2017.2的更新可能在将来解决这个问题。现在我必须忍受这种解决方法,因为这是我们的主要团队项目。

我会在有任何更新后立即更新此问题。