Taxonomy Access Control Lite is a good module to achieve this.
This node_access module governs access to nodes based on the taxonomy
terms applied to the nodes. A simple scheme based on taxonomy, roles
and users controls which content is visible.
As the name implies, this module shares some functionality with an
earlier module called Taxonomy Access Control (TAC). If you are
shopping around for an access control module to use, consider that one
as well. See this module's README.txt for an explanation of "why yet
another access control module".
I have implemented one of my site for same purpose.
You can also go for
Content Access and ACL modules.
This module allows you to manage permissions for content types by
role and author. It allows you to specifiy custom view, edit and
delete permissions for each content type. Optionally you can enable
per content access settings, so you can customize the access for each
content node.
One more Option Using Group module.
The Group module allows you to create arbitrary collections of your
content and users on your site and grant access control permissions on
those collections
Out of the box, Drupal only allows a person to view, create or edit
the different content types you create. However, you might want to be
able to let them view or edit all content types, but only in a
specific section of the site.