That's one way of doing it, sure. I'd probably just run the hit detection on the host, though.
At some point, due to the way TNet works, you're going to have to give up security. Unless you rewrite the server to be a headless (-batchmode) Unity player, which is what I did, you're not going to have a 100% secure game.
With that in mind, the best advice to give is "do what feels natural and is easiest to work with". Aren always tells people to worry about cheaters when they come, and while I certainly wouldn't recommend doing that, it is worth knowing that other security options exist.
You can modify mono.dll to only load your files, you can obfuscate your code, encrypt your assemblies (modify mono to decrypt upon load), and pack mono.dll. Calculate checksums on all your files and verify that they match. With these changes in place you (almost) prevent 1. injecting assemblies into mono environment at runtime 2. modification of your assemblies. This would deter the vast majority of cheaters as most cheats for Unity games rely on mono injection or reflexIL (or mono.cecil, same effect).
At that point I'd probably start attacking the network communication, so it'd be worth encrypting all your packets and preferring TCP over UDP (hard to spoof those seq#).
Absolutely do not use that terrible "anti-cheat" asset for Unity that everyone uses. IT DOES NOTHING. It does less than nothing! Even if you obfuscate it, I'm going to be able to find it and disable it completely with minimal effort.
You can have the player send their ping to Target.All every X seconds (TNet3 might have this built in?). As for changing host, maybe only do that if the current host's ping is above a static limit? I guess, technically, the best choice for host would always be the client with the lowest ping to the server, since all packets must travel through the server anyway.