There are a couple more business rules you need to take into account.
Don't forget that there are both PUBLIC and PRIVATE synonyms.
Just because a synonym of a given name exists does NOT mean it is the one a given user is trying to create. If a user is trying to create a private synonym you need to see if the OWNER and NAME both match.
What is a user issues a CREATE OR REPLACE for their own private synonym? Is that OK or should that be prevented also?