Using Geth and a private blockchain, is there any possibility to specify an additional condition for a block to be valid? In particular, I want to accept only blocks that are mined from miners that are listed in a smart contract. Other blocks should just be ignored. The purpose is to secure a private testnet where the vaild miners change over time (by vote). I think it would also be a good idea, if no miner could mine two consecutive blocks. Is this possible?
What you're looking for is probably a Proof of Authority chain. Essentially, rather than a block being valid or not based on a hash, it's valid or not based on who mined it.
I'm not sure how geth's PoA system works, but Parity has a PoA mode which allows the creator of the chain to use a contract to specify current authorities.
As far as I am aware, it is not possible to determine which miner may or may not mine the next block in either geth or parity.