private/add-AzurePermissions.ps1

function add-AzurePermissions{
    Param(
        [Parameter(Mandatory=$true)]$permission,
        [Parameter(Mandatory=$true)]$roleDefinitionsLookup,
        [Parameter(Mandatory=$true)]$targetPath,
        [Parameter(Mandatory=$true)]$targetType,
        [Parameter(Mandatory=$true)]$targetId,
        [Parameter(Mandatory=$false)]$tenure = "Permanent"
    )
    $roleDefinitionId = $permission.properties.roleDefinitionId.Split("/")[-1]
    if(!$roleDefinitionsLookup.$roleDefinitionId){
        Write-LogMessage -level 3 -message "Role /$($targetPath)/$roleDefinitionId not found in lookup hash, skipping"
        continue #role does not exist
    }
    $permissionSplat = @{
        targetPath = $targetPath
        targetType = $targetType
        targetId = $targetId
        principalEntraId = $permission.properties.principalId
        principalType = $permission.properties.principalType
        through = $roleDefinitionsLookup.$roleDefinitionId.properties.roleName
        tenure = $tenure
        startDateTime = $permission.properties.startDateTime
        endDateTime = $permission.properties.endDateTime
        createdDateTime = $permission.properties.createdOn
        modifiedDateTime = $permission.properties.updatedOn
    }
    foreach($action in $roleDefinitionsLookup.$roleDefinitionId.properties.permissions.actions){
        $permissionSplat.principalRole = $action
        $permissionSplat.accessType = "Allow"
        New-AzurePermissionEntry @permissionSplat
    }
    foreach($notAction in $roleDefinitionsLookup.$roleDefinitionId.properties.permissions.notActions){
        $permissionSplat.principalRole = $notAction
        $permissionSplat.accessType = "Deny"
        New-AzurePermissionEntry @permissionSplat
    }
    foreach($dataAction in $roleDefinitionsLookup.$roleDefinitionId.properties.permissions.dataActions){
        $permissionSplat.principalRole = $dataAction
        $permissionSplat.accessType = "Allow"
        New-AzurePermissionEntry @permissionSplat
    }
    foreach($notDataAction in $roleDefinitionsLookup.$roleDefinitionId.properties.permissions.notDataActions){
        $permissionSplat.principalRole = $notDataAction
        $permissionSplat.accessType = "Deny"
        New-AzurePermissionEntry @permissionSplat
    }
}