I was making a multiplayer racing-type-game and initially made it so that absolutely everything was done server-side: input was sent from clients and the server did everything else (sending entity updates back). This is obviously the most secure way to do things, but most games don’t do this pure approach. The issue is that the player can then notice latency incredibly obviously - there is a big delay from when they press a button and see the result.
What I have been planning on doing but haven’t had time to would be to have the client control the entity positions directly, sending updates periodically to the server. Then the server stores the timestamp of the last entity update it got, and if the distance change versus the time change is too high, they are considered to be cheating.
I think, in general, you’ve got to decide what sacrifices to make on which side for your game specifically. A turn-based game like Worms could almost definitely do absolutely everything server-side, but this won’t work for live action games.