Atlassian.Bitbucket.Repository.GroupPermission.psm1
using module .\Atlassian.Bitbucket.Authentication.psm1 using module .\Classes\Atlassian.Bitbucket.Permissions.psm1 using module .\Atlassian.Bitbucket.Tools.psm1 function Get-BitbucketRepositoryGroupPermission { [OutputType([GroupPermissionV1])] [CmdletBinding()] param( [Parameter( ValueFromPipelineByPropertyName=$true, HelpMessage='Name of the team in Bitbucket. Defaults to selected team if not provided.')] [string]$Team = (Get-BitbucketSelectedTeam), [Parameter( Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage='The repository slug.')] [Alias('Slug')] [string]$RepoSlug ) Process { $endpoint = "group-privileges/$Team/$RepoSlug" $permissions = Invoke-BitbucketAPI -Path $endpoint -API_Version '1.0' foreach ($permission in $permissions) { [GroupPermissionV1]::New($permission) } } } function Add-BitbucketRepositoryGroupPermission { [OutputType([GroupPermissionV1])] [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')] param( [Parameter( ValueFromPipelineByPropertyName=$true, HelpMessage='Name of the team in Bitbucket. Defaults to selected team if not provided.')] [string]$Team = (Get-BitbucketSelectedTeam), [Parameter( Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage='The repository slug.')] [Alias('Slug')] [string]$RepoSlug, [Parameter( Mandatory=$true, Position=1, ValueFromPipelineByPropertyName=$true, HelpMessage='The group slug.')] [string]$GroupSlug, [Parameter( Mandatory=$true, Position=2, ValueFromPipelineByPropertyName=$true, HelpMessage='The permission to give the group.')] [ValidateSet('read','write','admin')] [String]$Privilege ) Process { $endpoint = "group-privileges/$Team/$RepoSlug/$Team/$GroupSlug" if ($pscmdlet.ShouldProcess("$GroupSlug $privilege in repo: $RepoSlug", 'grant')){ $response = Invoke-BitbucketAPI -Path $endpoint -Method Put -Body $privilege -API_Version '1.0' -ContentType 'application/x-www-form-urlencoded' Return [GroupPermissionV1]::New($response) } } } function Set-BitbucketRepositoryGroupPermission { [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')] param( [Parameter( ValueFromPipelineByPropertyName=$true, HelpMessage='Name of the team in Bitbucket. Defaults to selected team if not provided.')] [string]$Team = (Get-BitbucketSelectedTeam), [Parameter( Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage='The repository slug.')] [Alias('Slug')] [string]$RepoSlug, [GroupPermissionV1[]]$Permissions ) Process{ $currentPermissions = Get-BitbucketRepositoryGroupPermission -RepoSlug $RepoSlug -Team $Team # Remove extra permissions foreach ($current in $currentPermissions) { $extra = $true foreach ($new in $Permissions) { if(Compare-CustomObject $current $new) { $extra = $false break } } if($extra) { $current | Remove-BitbucketRepositoryGroupPermission -RepoSlug $RepoSlug -Team $Team } else { Write-Verbose "Matching Permission: $($current.groupslug) - $($current.privilege)" } } # Add missing permissions foreach ($new in $Permissions) { $missing = $true foreach ($current in $currentPermissions) { if(Compare-CustomObject $new $current) { $missing = $false break } } if($missing) { $new | Add-BitbucketRepositoryGroupPermission -RepoSlug $RepoSlug -Team $Team } } } } function New-BitbucketRepositoryGroupPermission { [OutputType([GroupPermissionV1])] [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Low')] param( [string]$GroupSlug, [ValidateSet('read','write','admin')] [string]$Privilege ) if ($pscmdlet.ShouldProcess('GroupPermissionV1 Object', 'create')){ Return [GroupPermissionV1]::New($GroupSlug, $Privilege) } } function Remove-BitbucketRepositoryGroupPermission { [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')] param( [Parameter( ValueFromPipelineByPropertyName=$true, HelpMessage='Name of the team in Bitbucket. Defaults to selected team if not provided.')] [string]$Team = (Get-BitbucketSelectedTeam), [Parameter( Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage='The repository slug.')] [Alias('Slug')] [string]$RepoSlug, [Parameter( Mandatory=$true, Position=1, ValueFromPipelineByPropertyName=$true, HelpMessage='The Slug of the group to be removed.')] [string]$GroupSlug ) Process { $endpoint = "group-privileges/$Team/$RepoSlug/$Team/$GroupSlug" if ($pscmdlet.ShouldProcess("$GroupSlug in repo: $RepoSlug", 'delete')){ Return Invoke-BitbucketAPI -Path $endpoint -Method Delete -API_Version '1.0' } } } |