Private/ConvertTo-AccessPackageResourceSpec.ps1

function ConvertTo-AccessPackageResourceSpec {
    <#
    .SYNOPSIS
        Turns the per-type parameters (Group / Application / SharePoint) into the
        one shape Entitlement Management uses for every resource type:
        originSystem + originId + which role.
    .NOTES
        Internal helper, used by the *-AccessPackageResource functions. A new
        resource type = one more case here, nothing else changes.
    #>


    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [ValidateSet('Group', 'Application', 'SharePoint')]
        [string]$Type,

        [string]$GroupId,
        [string]$GroupRole = 'Member',
        [string]$ApplicationId,
        [string]$SiteUrl,
        [string]$RoleName
    )

    switch ($Type) {
        'Group' {
            [PSCustomObject]@{
                Type         = 'Group'
                OriginSystem = 'AadGroup'
                OriginId     = $GroupId
                RoleName     = $GroupRole
                # Group roles are always Member_<groupId> / Owner_<groupId>
                RoleOriginId = "$($GroupRole)_$GroupId"
            }
        }
        'Application' {
            [PSCustomObject]@{
                Type         = 'Application'
                OriginSystem = 'AadApplication'
                OriginId     = $ApplicationId
                RoleName     = $RoleName
                RoleOriginId = $null
            }
        }
        'SharePoint' {
            [PSCustomObject]@{
                Type         = 'SharePoint'
                OriginSystem = 'SharePointOnline'
                OriginId     = $SiteUrl.TrimEnd('/')
                RoleName     = $RoleName
                RoleOriginId = $null
            }
        }
    }
}