Internal/functions/New-DssRoleConfig.ps1

function New-DssRoleConfig {
    <#
    .SYNOPSIS
        Creates a new schema config section for scanning

        Output passed to STDOUT as PSCustomObject
    
    .PARAMETER SqlInstance
        SQL Server instance holding the databse to be used as the base for the configuration

    .PARAMETER SqlCredential
        A PSCredential object to connect to SqlInstance

    .PARAMETER Database
        Database to use as basis for config
    #>

    [CmdletBinding()]
    param (
        [string]$SqlInstance,
        [PSCredential]$SqlCredential,
        [String]$Database
    )
    
    begin {}
    
    process {}
    
    end {
        $output = @()
        $roles = Get-DbaDbRole -SqlInstance $SqlInstance -SqlCredential $SqlCredential -Database $database
        $roleMembers = Get-DbaDbRoleMember -SqlInstance $SqlInstance -SqlCredential $SqlCredential -Database $database
        $permissions = Get-DbaUserPermission -SqlInstance $SqlInstance -SqlCredential $SqlCredential -Database $database -IncludePublicGuest

        Foreach ($role in $roles){


            $output += [PSCustomObject]@{
                rolename = $role.name
                owner = $role.owner
                members = $roleMembers | Where-Object {$_.role -eq $role.name} | Select-Object -Property UserName
                permissions = $permissions | Where-Object {$_.Grantee -eq $role.name} | Select-Object permission, securable, grantee, member
            }
        }
        $output
    }
}