It is on purpose mainly to avoid cheating. Unreal uses the Authoritative Server model which means that Clients can only send input (RPC’s) to the server and the server decides what to do with it and sets the variables accordingly.
If you have some client variables you want to send to the server you can do that with a RunOnServer RPC from any Actor the client owns at the time of making the call. This could be its PlayerController or Pawn/Character or any Actor owned by something that the client owns eg. a Flashlight owned by a Character possessed/owned by a PlayerController owned by the Client.
In C++ you have a special validate function that is used to validate the incoming RPC’s and if it is not validated the client gets kicked by the server. Blueprint is more forgiving and doesn’t have this by default but you should still consider making your own validation and kick the player that attempts to cheat if necessary.