Изменения в разрешениях пользователя не сохраняются - PullRequest
2 голосов
/ 31 мая 2010

Я использую drupal 6.

Похоже, страница разрешения не может сохранить слишком много настроек.

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

например, если я сниму 2 флажка, а затем установите один флажок, разрешение будет сохранено.

Кто-нибудь знает, какая функция используется на странице разрешения для вставки результата в БД?

мой предел памяти php 256M.

Ответы [ 4 ]

4 голосов
/ 15 ноября 2012

Здесь есть хорошее объяснение проблемы, с которой вы столкнулись: http://2bits.com/drupal/drupal-not-saving-admin-pages-large-number-input-fields.html

4 голосов
/ 01 ноября 2012

Вам нужно настроить max_input_vars в php.ini. Обычное значение по умолчанию - 1000, но с большим количеством модулей страница разрешений Drupal легко затмевает это. Просто добавьте еще один ноль и сделайте его 10000, если у вас есть доступ к php.ini и перезапустите apache. Расположение файла php.ini зависит от конфигурации вашего сервера.

У меня была такая же проблема, без ошибок в журнале ошибок, и это исправило ее для меня.

1 голос
/ 31 мая 2010

Изменить размер таблицы БД? Похоже на его усечение.

0 голосов
/ 17 июня 2010

Функция, которая сохраняет разрешения в базе данных: user_admin_perm_submit () .

function user_admin_perm_submit($form, &$form_state) {
  // Save permissions:
  $result = db_query('SELECT * FROM {role}');
  while ($role = db_fetch_object($result)) {
    if (isset($form_state['values'][$role->rid])) {
      // Delete, so if we clear every checkbox we reset that role;
      // otherwise permissions are active and denied everywhere.
      db_query('DELETE FROM {permission} WHERE rid = %d', $role->rid);
      $form_state['values'][$role->rid] = array_filter($form_state['values'][$role->rid]);
      if (count($form_state['values'][$role->rid])) {
        db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $role->rid, implode(', ', array_keys($form_state['values'][$role->rid])));
      }
    }
  }

  drupal_set_message(t('The changes have been saved.'));

  // Clear the cached pages
  cache_clear_all();
}
...