This post, http://www.cognifide.com/blogs/sitecore/why-and-how-hide-publish-site-buttons-in-sitecore/, talks about updating a built-in Sitecore role, Sitecore Client Publishing, to deny users access to the Publish Site button.
While this is one way of disabling access to the Publish buttons for non-admin users, the best way is not to change the permissions of the Sitecore Client Publishing role, but rather, simply not assign that role to content authors. In conjunction with this, I would also recommend the most basic of workflows. The Sample Workflow that comes with every Sitecore install out-of-the-box is usually enough for most of my clients. With workflow enabled, content authors are required to use the Workflow buttons to push things live and the Publish buttons are not available to them at all.
I don’t agree with the approach suggested in the article of updating one of the built-in Sitecore roles, in this case, Sitecore Client Publishing. The sole purpose of assigning the Sitecore Client Publishing role to a user is to give them the ability to publish Items. If you update the Sitecore Client Publishing role so that it no longer has access to the Publish buttons then it becomes useless and if you ever need to give a user access to those buttons, you would be forced to make them admins!
The standard roles that content authors should be given are only two: Sitecore Client Users, which gives them the ability to login to Sitecore, and, Sitecore Client Authoring, which gives them LIMITED access to the Content Editor. These two roles do not give content authors the ability to publish from anywhere in the Sitecore console. Any roles given beyond these two are for extra functionality and open the door to additional user error.