Public/Add-VSTeamGitRepositoryPermission.ps1
function Add-VSTeamGitRepositoryPermission { [CmdletBinding(DefaultParameterSetName = 'ByProjectAndUser')] param( [parameter(Mandatory=$true,ParameterSetName="ByProjectAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByProjectAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByProjectAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndDescriptor")] [VSTeamProject]$Project, [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndDescriptor")] [ValidateScript({ try { [System.Guid]::Parse($_) | Out-Null $true } catch { $false } })] [string]$RepositoryId, [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndDescriptor")] [string]$RepositoryName, [parameter(Mandatory=$false,ParameterSetName="ByRepositoryIdAndGroup")] [parameter(Mandatory=$false,ParameterSetName="ByRepositoryIdAndUser")] [parameter(Mandatory=$false,ParameterSetName="ByRepositoryNameAndGroup")] [parameter(Mandatory=$false,ParameterSetName="ByRepositoryNameAndUser")] [parameter(Mandatory=$false,ParameterSetName="ByRepositoryIdAndDescriptor")] [parameter(Mandatory=$false,ParameterSetName="ByRepositoryNameAndDescriptor")] [string]$BranchName, [parameter(Mandatory=$true,ParameterSetName="ByProjectAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndDescriptor")] [string]$Descriptor, [parameter(Mandatory=$true,ParameterSetName="ByProjectAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndGroup")] [VSTeamGroup]$Group, [parameter(Mandatory=$true,ParameterSetName="ByProjectAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndUser")] [VSTeamUser]$User, [parameter(Mandatory=$true,ParameterSetName="ByProjectAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByProjectAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByProjectAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndDescriptor")] [VSTeamGitRepositoryPermissions]$Allow, [parameter(Mandatory=$true,ParameterSetName="ByProjectAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByProjectAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByProjectAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndGroup")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndUser")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryIdAndDescriptor")] [parameter(Mandatory=$true,ParameterSetName="ByRepositoryNameAndDescriptor")] [VSTeamGitRepositoryPermissions]$Deny ) process { # SecurityNamespaceID: 2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87 # Token: repoV2/<projectId>" <-- Whole project # Token: repoV2/<projectId>/<repositoryId>" <-- Whole repository # Token: repoV2/<projectId>/<repositoryId>/refs/heads/<branchName>" <-- Single branch $securityNamespaceId = "2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87" # Resolve Repository Name to ID if ($RepositoryName) { $repo = Get-VSTeamGitRepository -ProjectName $Project.Name -Name $RepositoryName if (!$repo) { throw "Repository not found" } $RepositoryId = $repo.ID } # Resolve Group to Descriptor if ($Group) { $Descriptor = _getDescriptorForACL -Group $Group } # Resolve User to Descriptor if ($User) { $Descriptor = _getDescriptorForACL -User $User } $token = "repoV2/$($Project.ID)" if ($RepositoryId) { $token += "/$($RepositoryId)" } if ($BranchName) { $branchHex = _convertToHex($BranchName) $token += "/refs/heads/$($branchHex)" } Add-VSTeamAccessControlEntry -SecurityNamespaceId $securityNamespaceId -Descriptor $Descriptor -Token $token -AllowMask ([int]$Allow) -DenyMask ([int]$Deny) } } |