How can I allow a player to control multiple pawns in multiplayer game?

I am working on a multiplayer game where players can control multiple units (pawns). The units can be moved physically by the player. Currently, I have one PlayerController per player, and the PC doesn’t “possess” the units, as it needs to control several of them at once. I see several options:

A) Make all interactions go through PlayerController with Server functions, looking like:

UFUNCTION(Server, Reliable, WithValidation)
void ServerMoveUnit(AMyUnitPawn * Unit, FVector Location);

This works because each player owns its PlayerController and therefore is allowed to call Server RPCs on it. The downside is that I could end up with lots of unrelated RPCs here.

B) Keep the RPCs inside the classes they operate on. This means something like:

UCLASS()
class AMyUnitPawn : APawn
{
...
    UFUNCTION(Server, Reliable, WithValidation)
    void ServerMove(FVector Location);
}

I think it looks better, but for this to work the PlayerController has to be the NetOwner of the unit, otherwise it’s not allowed to call Server functions.

In the Shooter example, I see that weapons are set as owned by characters, but I’m not sure how to translate this in my case. Should the PC control multiple pawns? Or should I create separate controllers for each pawn?

Which approach would you recommend?

The approach I have chosen so far is to have the each player PlayerController be the owner of the controlled pawns. I do this by setting the FActorSpawnParameters::Owner property on spawn.