Yes. There are a number of ways.
1 Look at taxonomy_access http://drupal.org/node/200631. This permissions model almost duplicated 'organic groups' functionality with taxonomy. Organic groups is another way of restricting content to a particular 'community of interest' which is likely to be related to a particular information slice. Two possible module/solution oriented approaches.
The next two solutions involve module/code writing.
2. Create a custom menu that runs the display. This could invoke a view block or any other block. Write an access callback. e.g.
// test interface for the editors report. It is intended to be put in a block.
$items[HOTTOPICSNOTIFY_MODULE_NAME . '/editors-report/%'] = array(
'title' => 'Editors Report',
'access callback' => 'hottopicsnotify_access_callback',
'access arguments' => array(3),
...
);
Then in the callback write your logic. % may be the taxonomy term, meaning that you can use this to query against allowed users.
Check out the menu examples module at api.drupal.org/api/examples/menu_example
3 Create node-access realms and assign them to people. e.g. when you save a node under a taxonomy make sure it has a realm relating to the taxonomy
/**
*
*
* This marks a node as being applicable to a particular type of permission related to a taxonomy.
*
*
* @param type $node
*/
function hottopics_node_access_records($node) {
$grants = array();
if ($node->type == 'hot_topic_research' || $node->type == 'hottopics') {
$grants[] = array(
'realm' => 'view_hottopics_fish_biology',
'gid' => 1,
'grant_view' => 1, // unpublished content is fine.
'grant_update' => 1,
'grant_delete' => 1,
'priority' => 100, // bigger numbers make this more authoritative
);
}
return $grants;
}
See hook_node_access_records
Then hook_node_grants gets called when the user tries to access the content, or it is brought up in a views index. This is the strength of this approach, you can use existing views module generated blocks.
/**
* Provide access to a realm to a user.
*
*
* @param type $account
* @param type $op
* @return int
*/
function hottopics_node_grants($account, $op) {
$grants = array();
if ($op == 'view') {
// Hot topics editorial board gets all hot topic grants
$roles = array_values($account->roles);
if (array_search('editorial board admin', $roles) !== FALSE || array_search('editorial board member', $roles) !== FALSE) {
$grants['view_hottopics_fish_biology'] = array(1);
}
}
return $grants;
}
See hook_node_grants api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_grants/7