Детализация пользовательских разрешений на файловое поле Drupal

#drupal #drupal-6

#drupal #drupal-6

Вопрос:

У меня есть сайт на Drupal 6 с типом узла, который имеет необязательное неограниченное значение Imagefield (Filefield / CCK). Разрешения на содержимое типа узла установлены так, чтобы все аутентифицированные пользователи могли редактировать эти узлы, что здорово. Пользователи могут редактировать узел и прикреплять изображения к Imagefield, что тоже здорово.

Однако, когда пользователь редактирует один из этих узлов, он также может редактировать / удалять изображения Imagefield, загруженные другими пользователями. Как я могу запретить пользователю редактировать и / или удалять изображения Imagefield, которые не были загружены сами по себе?

Ответ №1:

Благодаря нескольким людям на канале #drupal-support в IRC я смог получить ответ на этот вопрос. Вот пример решения на основе модуля:

 function my_module_form_alter(amp;$form, amp;$form_state, $form_id) {
  global $user;
  switch ($form['type']['#value']) {
    case "my_content_type":
      if (user_access("administer nodes")) { break; }
      foreach (array_keys($form['field_my_images']) as $key) {
        if (!is_numeric($key)) { continue; }
        if ($form['field_my_images'][$key]['#default_value']['fid']) {
          if ($form['field_my_images'][$key]['#default_value']['uid'] != $user->uid) {
            $form['field_my_images'][$key]['#access'] = false;
          }
        }
      }
      break;
  }
}
  

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

$form['#node']->field_my_images

вместо:

$form['field_my_images']