2010-07-05 6 views
1

Je cours drupal 6 et je veux coder cette fonctionnalité: après que l'utilisateur a rempli le formulaire, il peut cliquer sur un bouton supplémentaire, ce qui rendra le formulaire en lecture seule pour lui.modifier l'accès au nœud avec le module drupal

J'ai pensé à un champ caché et un bouton supplémentaire, qui après que l'utilisateur a cliqué sur le bouton supplémentaire mis le champ caché à un état vrai. Lorsque je charge le noeud et que le champ hidden_field a l'état vrai, je veux définir tous les champs du noeud sur readonly. (Hook_access, node_access?!?)

Puh .. espérons que ce tout est pas trop confus (parce que même je suis un peu confus ...)

Répondre

3

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.

Questions connexes