How to charge cycles from a user?

Let my canister C has an XDR subaccount for every user. Users send cycles to the subaccount before they can act.

How can I enforce that a user does not use more (or, to say, “much more”, a strict warranty is not necessary) cycles than he/she paid?

Should I to do this estimate (approximate) cost of every operation to count it?

Especially, how to do with “heavy” operations (like canister creation)? I need to know how much it will use, don’t I?

Currently there is no way you can pre compute cycle consumption for canister endpoints.