2009-07-21 18 views
2

사용자에게 주어진 프로젝트에 대한 "빌드 시작"권한이 있는지 알아 보는 방법을 찾고 있습니다.TFS API의 사용자 권한 - 빌드 시작, 빌드 관리

현재로서는 VersionControlServer 개체를 사용하여 프로젝트 내에서 사용자의 유효 사용 권한에 대한 문자열 배열을 반환 할 수 있음을 알고 있습니다. 그러나 VersionControlServer에서 GetEffectivePermissions 메서드를 실행하면 "Start a Build"및 "Administer a Build"사용 권한은 사용자의 사용 권한을 나열하는 배열에 포함되지 않습니다.

빌드 권한을 제어하지 않는 VersionControlServer를 쿼리하고 있기 때문에 (틀린가요?) 가정합니다.

TFS 2008 API를 통해 사용자의 효과적인 "빌드 관련"권한을 어떻게 찾을 수 있습니까?

+0

TFS 버전은 무엇입니까? 05 또는 08? – RobS

+0

사용중인 버전은 TFS 2008입니다. – dabuild

답변

1

불행히도 팀 빌드에는 버전 제어와 같은 완전한 클라이언트 개체 모델이 없습니다. 2008 년에는 훨씬 나아졌지만 자체 보안 API는 여전히 부족합니다. 그래서 당신은 서버 전체에서 제공하는 기본적인 웹 서비스 인터페이스에 수준을 사임해야한다 :

: 여기

  • IAuthorization
  • ICommonStructure
  • IGroupSecurity
  • 은 PowerShell에서 빠른 데모입니다
    # add me to the Build Services security group 
    $tfs = Get-TfsServer njtfs -all 
    $user = $tfs.gss.ReadIdentityFromSource($tfs.GSS_SearchFactor::AccountName, "rberg") 
    $uri = $tfs.css.GetProjectFromName("Test-ConchangoV2").uri 
    $role = $tfs.gss.ListApplicationGroups($uri) | ? { $_.displayname -match "Build" } 
    $tfs.gss.AddMemberToApplicationGroup($role.Sid, $user.Sid) 
    
    # explicitly give me the Administer Builders permission 
    $ace = new-object $tfs.GSS_AccessControlEntry ADMINISTER_BUILD, $user.Sid, $false 
    $objectId = [Microsoft.TeamFoundation.PermissionNamespaces]::Project + $Uri 
    $tfs.AUTH.AddAccessControlEntry($objectId, $ace) 
    
    # print build-related ACLs 
    $tfs.AUTH.ReadAccessControlList($objectId) | 
        ? { $_.actionId -like "*build" } | 
        ft -auto ActionId, Deny, @{ 
         Label = "Name"; 
         Expression = { $tfs.gss.ReadIdentity($tfs.GSS_SearchFactor::Sid, $_.Sid, $tfs.GSS_QueryMembership::none).DisplayName } 
        } 
    

    불행히도,이 낮은 수준 l API에는 "효과적인 사용 권한"에 대한 원 스톱 쇼핑이 없습니다. Auth 서비스는 제한된 형태의 부모 - 자식 상속뿐만 아니라 여러 그룹 구성원을 통해 사용자에게 적용되는 다양한 ACE를 해결할 수 있지만 버전 제어 계층 구조에 대해서는 알지 못합니다. "공통 구조 "(일명 팀 프로젝트 -> 영역 & 반복) 계층 구조. 다행히 빌드 권한은 오직 한 레벨 (항상 Team Project 루트에 저장되어 있기 때문에)이므로 여러분의 경우에는 문제가되지 않아야합니다.

+0

이것은 내가 찾고 있었던 것입니다. Powershell 데모 주셔서 감사합니다. 그것은 설명을 훨씬 쉽게 소화하도록 만들었습니다. – dabuild