Transfer icp from user account to specific account

Hi, I would love to ask a question regarding this.
lets say the canister name is “comp”, and comp has users(callers).
In my code, i call the transfer function from the ledger to transfer icp.

Once the frontend integrates the function and a user(caller) transfers the token, will it work??
Since the args doesn’t take the from field.
or Will the ledger canister assume its the comp canister thats calling the function and not the caller??
How can I go about it??
Since we want users to be able to deposit their icp and withdraw anytime.

Thanks

public type TransferArg = {
    to : Account;
    fee : ?Nat;
    memo : ?Blob;
    from_subaccount : ?Blob;
    created_at_time : ?Nat64;
    amount : Nat;
  };