Allowing optional upgrades

Hello! I have a contract factory that deploys Minimal Proxies otherwise known as Clones. The deployer of the clone is the owner of it, while I am the owner of the factory that also stores the implementation contract address. Once I update the implementation contract address in the Factory all the new Clones will have the new implementation. What I want to accomplish is to allow owners of all the old clones to upgrade to a new version as well but only if they would like that. I should not have the ability to upgrade for them. Is this something that should be accomplished with the Beacon Proxy?

I suspect I would need to deploy a beacon proxy and the beacon for each of the users, and then they could update the implementation address of the beacon if they want. Just not sure if that is the optimal solution

Thank you very much!

One way I managed to do this is instead of Clone I deploy the ERC1967Proxy. I could then let the owners of that proxy change the implementation address of that proxy by calling the upgradeTo against the proxy. I believe that works. One caveat is that my factory is UUPS upgradable as well. The closest I found to ERC1967Proxy in contracts-upgradeable is ERC1967UpgradeUpgradeable . But that seems to behave totally different. I can not set the implementation on initialization for example. I believe that since I am using the ERC1967Proxy just to deploy a new instance of it, I should be okay using it in the UUPS upgradable contract. Is that correct? I use it like this:

address pool = address(new ERC1967Proxy(poolImplementationAddress, ""));

And the contract I use this in is UUPS upgradable. Any feedback is very appreciated!