I know that the SendFrom command is depreciated, There's two things I'm hoping you can help with.
1. How do I sendtoaddress but from a particular address, e.g. 1 user sending another bitcoin , how can i specify it to come from their address/label.
2. Setting up users and assigning their addresses through 'labels' (as i know the account feature is gone, would be ok?)
It sounds like you're trying to setup some sort of online "custodial" type wallet where your users are able to send one another funds
within the confines of your system. In this instance, you may be better off simply running like a "normal" custodial setup, controlling the wallets/addresses in the backend and using a database to track payments into, within and out of your system, rather than trying to have multiple users within essentially the same wallet.
You'd be able to generate receive addresses as required and simply assign a generated "deposit" address to a specific user in the database... If UserAAddress receives funds, then UserABalance = UserABalance + amount. If User A then wants to send User B funds, you simply alter the appropriate values in the database (off-chain). So UserABalance = UserABalance - amount... UserBBalance = UserBBalance + amount etc.
Should a user wish to withdraw funds from the service or send to an external address, you can then simply create a transaction from your master wallet, and it doesn't really matter what address the funds come from... you then simply debit the appropriate amount from the user balance... UserABalance = UserABalance - amount.
Obviously, this is a dramatic simplification of the setup, and you'd need to consider ways to minimise risk to the funds in your system wallet should your system security be compromised... most services tend to use a system of hot wallets and cold storage to achieve this.