Public/Vaults/Set-DSVaultRoles.ps1
function Set-DSVaultRoles { <# .SYNOPSIS Sets the allowed user groups for a given vault. .DESCRIPTION Sets which user groups have access to a given vault. If the "Update" flag is present and a supplied user group's name is already a member of the vault, it will remove this user group. .EXAMPLE No update flag, no user groups allowed Current user groups allowed in vault: None Set-DSVaultRoles @("Role1", "Role2") -> Allowed user groups: Role1, Role2 .EXAMPLE No update flag, some user groups allowed Current user groups allowed in vault: Role1, Role2 Set-DSVaultRoles @("Role3") -> Allowed user groups: Role3 .EXAMPLE Update flag present, some user groups allowed (Add another) Current user groups allowed in vault: Role1 Set-DSVaultRoles @("Role2") -Update -> Allowed user groups: Role1, Role2 .EXAMPLE Update flag present, some user groups allowed (Remove an user group) Current user groups allowed in vault: Role1, Role2 Set-DSVaultRoles @("Role2", "Role3") -Update -> Allowed user groups: Role1, Role3 #> [CmdletBinding()] PARAM ( [ValidateNotNullOrEmpty()] #Vault's ID to update [guid]$VaultID, #String array with user groups names (Not ID's) to allow in vault [string[]]$AllowedRolesList, #Used to know if we're creating a vault or updating a currently existing one [switch]$Update ) PROCESS { try { [object[]]$Roles = if ($Update) { (Invoke-DS -URI "$Script:DSBaseURI/api/security/repositories/$VaultID/roles" -Method "GET").Body.data } else { if (($res = Invoke-DS -URI "$Script:DSBaseURI/api/security/roles/basic" -Method "GET").isSuccess) { if ($res.Body.data.Length -eq 0) { throw "No roles were found." } $res.Body.data } else { throw "Error getting roles list." } } $RolesListToSave = @() $Roles.GetEnumerator() | ForEach-Object { $RolesListToSave += @{ description = "" gravatarUrl = "" isAdministrator = if ($_.isAdministrator) { $true } else { $false } isMember = if ($Update) { if ($_.name -in $AllowedRolesList) { if ($_.isMember) { $false Write-Warning "Removed $($_.name) from allowed user groups." } else { $true } } else { $_.isMember } } else { if ($_.name -in $AllowedRolesList) { $true } else { $false } } isRole = $true name = $_.name repositoryId = $VaultID userId = if ($Update) { $_.userId } else { $_.id } } } $RequestParams = @{ URI = "$Script:DSBaseURI/api/security/repositories/$VaultID/roles" Method = "PUT" Body = ConvertTo-Json $RolesListToSave } $res = Invoke-DS @RequestParams -Verbose return $res } catch { Write-Error $_.Exception.Message } } } |