Public/Security/Get-JIMRoleMember.ps1

# Copyright (c) Tetron Limited. All rights reserved.
# Licensed under the Tetron Commercial License. See LICENSE file in the project root.

function Get-JIMRoleMember {
    <#
    .SYNOPSIS
        Gets the members of a security Role in JIM.
 
    .DESCRIPTION
        Retrieves Metaverse Objects that are statically assigned to a security Role.
        Members are returned sorted by display name.
 
    .PARAMETER RoleId
        The ID of the Role.
 
    .PARAMETER InputObject
        A Role from the pipeline, for example from Get-JIMRole.
 
    .OUTPUTS
        One object per member of the Role.
 
    .EXAMPLE
        Get-JIMRoleMember -RoleId 1
 
        Lists members of the role with ID 1.
 
    .EXAMPLE
        Get-JIMRole -Name "Administrator" | Get-JIMRoleMember
 
        Lists members of the Administrator role using the pipeline.
 
    .EXAMPLE
        Get-JIMRole | Get-JIMRoleMember
 
        Lists members of all roles.
 
    .LINK
        Get-JIMRole
        Add-JIMRoleMember
        Remove-JIMRoleMember
    #>

    [CmdletBinding(DefaultParameterSetName = 'ById')]
    [OutputType('JIM.RoleMemberDto')]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)]
        [Alias('Id')]
        [int]$RoleId,

        [Parameter(Mandatory, ParameterSetName = 'ByInputObject', ValueFromPipeline)]
        [PSCustomObject]$InputObject
    )

    process {
        # Check connection first
        if (-not $script:JIMConnection) {
            Write-Error "You are not connected to JIM. Run Connect-JIM -Url <your JIM URL> to authenticate, then try again."
            return
        }

        $id = if ($InputObject) { $InputObject.id } else { $RoleId }

        Write-Verbose "Getting members of role: $id"

        try {
            $response = Invoke-JIMApi -Endpoint "/api/v1/security/roles/$id/members"

            foreach ($member in $response) {
                $member
            }
        }
        catch {
            Write-Error "Failed to get role members: $_"
        }
    }
}