изменить доступ к узлу с помощью модуля drupal - PullRequest
1 голос
/ 05 июля 2010

Я запускаю drupal 6 и хочу закодировать эту функциональность: после того, как пользователь заполнил формуляр, он может нажать дополнительную кнопку, которая сделает форму доступной только для него.

Я подумал о скрытом поле и дополнительной кнопке, которая после нажатия пользователем дополнительной кнопки установила скрытое поле в истинное состояние. Когда я загружаю узел и скрытое поле имеет истинное состояние, я хочу установить все поля в узле только для чтения. (hook_access, node_access?!?)

тьфу .. надеюсь, что все это не слишком запутанно (потому что даже я сейчас немного растерялся ...)

1 Ответ

3 голосов
/ 06 июля 2010

Во-первых, вы не сможете помешать кому-либо, имеющему доступ к базе данных, или пользователю root просматривать данные (по крайней мере, без шифрования).

С точки зрения нормальной работы сайта это не так.не слишком сложно сделать.Два крючка, которые вам нужно вызвать: hook_node_grants () и hook_node_access_records () , есть довольно хороший пример, который также в значительной степени делает то, что вы хотите в вопросе, здесь .

Проще говоря, hook_node_access_records () возвращает структуру, детализирующую relms и id, которые могут выполнять над ней действия, а hook_node_grants () возвращает relms и id для пользователя.Если между ними есть совпадение, то доступ (чтение или запись) предоставляется.

Это дает вам большую гибкость.Одним из примеров может быть то, что люди могут читать только узлы, созданные другими людьми с одним и тем же знаком звезды.В hook_node_grants вы должны проверить пользовательский объект, чтобы получить звездочку и вернуть $grants['starsign'] = 2

Когда узел сохранен, hook_node_access_records должен проверить знак звезды пользователя, который его создал, сделать что-то вроде:

 $grants = array();
 $grants[] = array(
  'realm' => 'starsign',
  'gid' => $account->starsign,
  'grant_view' => 1,
  'grant_update' => 0,
  'grant_delete' => 0,
  'priority' => 0,
);
return $grants

Таким образом, если relm и идентификатор группы совпадают, пользователю будет предоставлен доступ для чтения.

...