Public/Set-LMRole.ps1
Function Set-LMRole { [CmdletBinding(DefaultParameterSetName = 'Default')] Param ( [Parameter(Mandatory, ParameterSetName = 'Id-Custom', ValueFromPipelineByPropertyName)] [Parameter(Mandatory, ParameterSetName = 'Id-Default', ValueFromPipelineByPropertyName)] [String]$Id, [Parameter(Mandatory, ParameterSetName = 'Name-Custom')] [Parameter(Mandatory, ParameterSetName = 'Name-Default')] [String]$Name, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [String]$NewName, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [String]$CustomHelpLabel, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [String]$CustomHelpURL, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [String]$Description, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [Switch]$RequireEULA, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [Switch]$TwoFARequired, [Parameter(ParameterSetName = 'Id-Custom')] [Parameter(ParameterSetName = 'Id-Default')] [Parameter(ParameterSetName = 'Name-Custom')] [Parameter(ParameterSetName = 'Name-Default')] [String]$RoleGroupId, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none")] [String]$DashboardsPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none")] [String]$ResourcePermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "commit", "publish", "none")] [String]$LMXToolBoxPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "install", "none")] [String]$LMXPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none")] [String]$LogsPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none")] [String]$WebsitesPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none")] [String]$SavedMapsPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none")] [String]$ReportsPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [ValidateSet("view", "manage", "none", "manage-collectors", "view-collectors")] [String]$SettingsPermission = "none", [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$CreatePrivateDashboards, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$AllowWidgetSharing, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$ConfigTabRequiresManagePermission, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$AllowedToViewMapsTab, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$AllowedToManageResourceDashboards, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$ViewTraces, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$ViewSupport, [Parameter(ParameterSetName = 'Name-Default')] [Parameter(ParameterSetName = 'Id-Default')] [Switch]$EnableRemoteSessionForResources, [Parameter(Mandatory, ParameterSetName = 'Name-Custom')] [Parameter(Mandatory, ParameterSetName = 'Id-Custom')] [PSCustomObject]$CustomPrivilegesObject ) #Check if we are logged in and have valid api creds If ($Script:LMAuth.Valid) { #Lookup Id if supplying username If ($Name) { $LookupResult = (Get-LMRole -Name $Name).Id If (Test-LookupResult -Result $LookupResult -LookupString $Name) { return } $Id = $LookupResult } #Build header and uri $ResourcePath = "/setting/roles/$Id" $Privileges = @() If (!$CustomPrivilegesObject) { If ($ViewTraces) { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "tracesManageTab" operation = "read" subOperation = "" } } If ($EnableRemoteSessionForResources) { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "remoteSession" operation = "write" subOperation = "" } } If ($AllowedToViewMapsTab) { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "resourceMapTab" operation = "read" subOperation = "" } } If ($AllowWidgetSharing) { $Privileges += [PSCustomObject]@{ objectId = "sharingwidget" objectName = "sharingwidget" objectType = "dashboard_group" operation = "write" subOperation = "" } } If ($CreatePrivateDashboards) { $Privileges += [PSCustomObject]@{ objectId = "private" objectName = "private" objectType = "dashboard_group" operation = "write" subOperation = "" } } If ($LMXToolBoxPermission) { $Privileges += [PSCustomObject]@{ objectId = "allinstalledmodules" objectName = "All installed modules" objectType = "module" operation = $LMXToolBoxPermission } } If ($LMXPermission) { $Privileges += [PSCustomObject]@{ objectId = "All exchange modules" objectName = "private" objectType = "module" operation = $LMXPermission } } If ($ViewSupport) { $Privileges += [PSCustomObject]@{ objectId = "chat" objectName = "help" objectType = "help" operation = "write" subOperation = "" } $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "help" objectType = "help" operation = "read" subOperation = "" } } If ($ConfigTabRequiresManagePermission) { $Privileges += [PSCustomObject]@{ objectId = "" objectName = "configNeedDeviceManagePermission" objectType = "configNeedDeviceManagePermission" operation = "write" subOperation = "" } } If ($AllowedToManageResourceDashboards) { $Privileges += [PSCustomObject]@{ objectId = "" objectName = "deviceDashboard" objectType = "deviceDashboard" operation = "write" subOperation = "" } } If ($DashboardsPermission -ne "none") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "dashboard_group" operation = If ($DashboardsPermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } If ($ResourcePermission -ne "none") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "host_group" operation = If ($ResourcePermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } If ($LogsPermission -ne "none") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "logs" operation = If ($LogsPermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } If ($WebsitesPermission -ne "none") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "website_group" operation = If ($WebsitesPermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } If ($SavedMapsPermission -ne "none") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "map" operation = If ($SavedMapsPermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } If ($ReportsPermission -ne "none") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "report_group" operation = If ($ReportsPermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } If ($SettingsPermission -ne "none") { If ($SettingsPermission -ne "manage-collectors" -and $SettingsPermission -ne "view-collectors") { $Privileges += [PSCustomObject]@{ objectId = "*" objectName = "*" objectType = "setting" operation = If ($SettingsPermission -eq "manage") { "write" }Else { "read" } subOperation = "" } $Privileges += [PSCustomObject]@{ objectId = "useraccess.*" objectName = "useraccess.*" objectType = "setting" operation = If ($ResourcePermission -eq "manage") { "write" }Else { "read" } subOperation = "" } } Else { $Privileges += [PSCustomObject]@{ objectId = "collectorgroup.*" objectName = "Collectors" objectType = "setting" operation = If ($SettingsPermission -eq "manage-collectors") { "write" }Else { "read" } } } } } Try { $Data = @{ customHelpLabel = $CustomHelpLabel customHelpURL = $CustomHelpURL description = $Description name = $NewName requireEULA = If ($RequireEULA.IsPresent) { "true" }Else { "" } roleGroupId = $RoleGroupId twoFARequired = If ($TwoFARequired.IsPresent) { "true" }Else { "" } privileges = If ($CustomPrivilegesObject) { $CustomPrivilegesObject }Else { $Privileges } } #Remove empty keys so we dont overwrite them @($Data.keys) | ForEach-Object { If ([string]::IsNullOrEmpty($Data[$_]) -and ($_ -notin @($MyInvocation.BoundParameters.Keys))) { $Data.Remove($_) } } $Data = ($Data | ConvertTo-Json) $Headers = New-LMHeader -Auth $Script:LMAuth -Method "PATCH" -ResourcePath $ResourcePath -Data $Data $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Data #Issue request $Response = Invoke-RestMethod -Uri $Uri -Method "PATCH" -Headers $Headers[0] -WebSession $Headers[1] -Body $Data Return (Add-ObjectTypeInfo -InputObject $Response -TypeName "LogicMonitor.Role" ) } Catch [Exception] { $Proceed = Resolve-LMException -LMException $PSItem If (!$Proceed) { Return } } } Else { Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again." } } |