Not exactly sure what you are trying to achieve but here is an example of how you can set variables in a stage and use them as conditions for future steps.
The approval check stage I assume runs some checks to validate if the pipeline should run. So if those checks pass, we can set an output variable and then use that variable to condition the download task. If the checks fail then approval=false and the download task will not run.

pool: default
variables:
system.debug: true
stages:
- stage: check_package
jobs:
- job: check_package
steps:
- bash: echo "checking package"
- stage: approval_check
jobs:
- job: bash
steps:
# run some checks and if succesful we can set set output variable approved=true
- bash: echo "##vso[task.setvariable variable=approved;isOutput=true]true"
name: approval
- stage: download
dependsOn: approval_check
condition: and(succeeded(), eq(dependencies.approval_check.outputs['bash.approval.approved'], 'true'))
jobs:
- job: download
steps:
- bash: echo "Downloading"
- stage: download2
dependsOn: approval_check
condition:
jobs:
- job: download
steps:
- bash: echo "Downloading"