Since the Proxy contract is now ownable, then the implementation contracts have to be ownable (or an extra variable has to be defined in the beginning) as well, otherwise the storage is corrupted every time the setScore() function is called.
Additionally, now each user owns his/her own contract, thus, the fallback function has to be protected with the onlyOwner modifier otherwise anyone can delegate calls to the logic contract. This, however, prevents the contract from being sent eth, so another solution can be implemented. something like: if (msg.value == 0 && isOwner()){delegetecall}
Since the Proxy contract is now ownable, then the implementation contracts have to be ownable (or an extra variable has to be defined in the beginning) as well, otherwise the storage is corrupted every time the setScore() function is called.
Additionally, now each user owns his/her own contract, thus, the fallback function has to be protected with the onlyOwner modifier otherwise anyone can delegate calls to the logic contract. This, however, prevents the contract from being sent eth, so another solution can be implemented. something like: if (msg.value == 0 && isOwner()){delegetecall}