No permission or approval is needed to send ETH to an EoA. You can just send it.
It's not clear what you mean when you say "buy ether". What is the wallet owner paying in exchange for the ether?
If the wallet owner is giving some other token like USDT in exchange, then yes you need permission to take that other token out of their control. This is what a DEX would do.
But if the exchange is handled off-chain, for example if the wallet owner used their credit card to pay you, then your contract is more like a faucet, it just needs to send them the Ether at their address when the appropriate function is called. No permission needed.
Ether and other ERC-20 tokens are different, in the sense that Ether is created by mining, and other tokens are minted just by adding a entry in their contract that so-and-so account now owns this much token.
Assuming this question is now about minting other tokens:
- You can mint the tokens yourself (paying the gas fee) and send it to anyone without their permission.
(Note that nothing is actually being sent in this case, minting N tokens for that user just means that now if someone queries your token contract with that user's account address, your contract will say that yes I admit that particular account has N tokens. This means that new tokens won't directly "appear" in the user's wallet, for the first time the user will actively have to give their wallet your token's contract address and tell the wallet to go look in that contract, and see if the contract says the owner has any tokens. Unless your token is very famous one which the wallet automatically checks for, this is a manual step.)
- But you cannot spend gas out of someone's wallet without their permission.
- You can have the recipient "authorize" you to withdraw up to X of some particular token or ETH. This authorization is a separate transaction and costs gas, and will have to be initiated by the wallet holder. But if X is a large number you will then be authorised to withdraw as many times as you like till that limit.
- If you have the authorization you can then mint the tokens paying the gas fee yourself, but then transfer the tokens and take whatever amount out of the other authorised tokens or ETH, from the user's wallet as you see fit, to compensate for the tokens you sent + gas.
- Of course this way you are compensated for the gas, but the net gas spent is much higher, being 2 or 3 transactions instead of just one.
For ideas on what is common these days, I suggest look at ICO, crowdsale or airdrop practices, where tokens are minted and assigned to accounts for free or for a fee paid earlier. It's cheaper to do it in bulk once rather than once for every user.