Similar idea to Susan’s:
Generally I do all dev work on a domain that’s mine, not the clients. Solves lots of the ’trust’ issues of them getting a final product and you not getting a final payment.
Dev site is set up and running thru the whole design process, but they can log in as admin, ftp in, do whatever they want -- training, add their content, add users, copy the db, copy the files, whatever....
....then when we agree everything is a go to move it live, it gets placed on their domain at the same time as the final payment is made. Basically keeps you ’kind of’ in control until the last possible second.
(Of course you couldn’t stop someone hellbent on copying the files/db to their site and trying to install themselves, but ive never had that happen in 20 years, even when there was haggling over final payment numbers. So if they are intent on evil they can make it happen no matter what levels you go to to avoid it.)
That said, I would always give full control to even the ’haggling’ or ’sketchy’ clients as full admin to login and do as they see fit during development, and, of course, when Im done with the project. Giving them a modicum of trust like that goes along way towards shaping their trust level back at you. After all, even if they skip the final payment, they did pay for a percentage of the project that is still theirs. (but, then, I always get a hefty down payment to make sure they are serious to begin with)
YMMV, but I think deving under your own domain is most control you will get in a process where some level of trust IS required between you and your clients at final payment time.