Tout d'abord vous ne serez pas en mesure d'arrêter quelqu'un qui a accès à la base de données ou à l'utilisateur root de voir les données (du moins pas sans chiffrement).
En termes de fonctionnement normal du site, ce n'est pas trop difficile à faire. Les deux crochets que vous devez invoquer sont hook_node_grants() et hook_node_access_records(), il y a un bon exemple, qui fait aussi à peu près ce que vous voulez dans la question, here. Tout simplement hook_node_access_records() retourne une structure détaillant les relms et les ids qui peuvent effectuer des actions dessus, et hook_node_grants() retourne les relms et les ids pour un utilisateur. S'il y a une correspondance entre les deux, l'accès (lecture ou écriture) est accordé.
Ceci vous donne beaucoup de flexibilité. Un exemple serait que les gens ne pouvaient lire que les nœuds créés par d'autres personnes avec le même signe astrologique. Dans hook_node_grants vous examiniez l'objet utilisateur pour obtenir le starsign et le retour $grants['starsign'] = 2
Lorsqu'un noeud est enregistré hook_node_access_records devraient vérifier le signe star de l'utilisateur qui l'a créé faire quelque chose comme:
$grants = array();
$grants[] = array(
'realm' => 'starsign',
'gid' => $account->starsign,
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
'priority' => 0,
);
return $grants
Ce Ainsi, si l'identifiant relm et l'identifiant du groupe correspondent, l'utilisateur aura un accès en lecture.