The near defacto-standard for this in Drupal 7 is the Workbench Moderation module, which is part of the broader Workbench suite. From the module page:
Workbench Moderation adds arbitrary moderation states to Drupal core's
"unpublished" and "published" node states, and affects the behavior of
node revisions when nodes are published. Moderation states are tracked
per-revision; rather than moderating nodes, Workbench Moderation
moderates revisions.
and about Workbench in general:
Workbench is a suite of modules which provide easier content
management for content administrators. Each of the "Workbench" modules
has been tested to work with the main Workbench module, and with the
other modules in the Workbench suite. The Workbench suite is modular,
allowing site builders to build the workflow that best suits the
content administrators on their site. The Workbench suite provides
authors, editors, and publishers with a unified interface for managing
content relevant to them. It allows people to focus on content, rather
than on learning Drupal.
This is highly tailorable to your particular organization, and all organizations differ. You didn't list out a lot of additional requirements, but typically you would create roles (Author, Editor, Publisher, Admin), and then define which role can do what (eg, Authors can only edit their own content, Editors can edit all, but only Publishers can make nodes public). Additional controls can be implemented with Workbench Access.
I have deployed solutions based on this for many organizations, mostly with success. I also like this solution, compared to others, as this module suite is "site-builder friendly". This means, that I can get the basics going for a site, and then have non-developers on the team work with clients to tailor it for their needs.
When it doesn't work well, it is usually because the organization doesn't really want content workflows as opposed to needing them.
This solution is also providing the base for the Content Moderation initiative for Drupal 8.
That said, depending on your situtation Groups / Organic Groups may be a better fit (as described in another answer). I would take both solutions for a test drive to see what works best for you.