2010-05-31 87 views
2

我使用的是drupal 6.用戶權限更改未保存

看起來好像權限頁面不能保存太多的設置。

我嘗試保存權限設置,但它只是沒有保存到數據庫中。 我發現這是由於「太多的領域」。 (使用內容許可模塊)。 如果我取消選中某些字段,然後檢查較小的字段,權限將被保存。例如,如果我取消選中2個複選框,然後選中一個複選框,則會保存權限。

是否有人知道哪個函數的權限頁面用於將結果插入到db中?

我的php內存限制是256M。

+0

它是由了Suhosin – anru 2010-05-31 23:13:45

回答

0

將權限保存在數據庫中的功能是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(); 
} 
1

更改數據庫表的大小?聽起來像截斷。

+0

如何做到這一點造成的?順便說一下,我已經拋棄了整個權限表,它只有16090字節,我可以在哪裏查看錶格大小。我的數據庫是mysql – anru 2010-05-31 02:39:30

+0

在ssh或HeidiSQL中將其類型更改爲具有數據庫客戶端(如mysql)的長文本gui – Kevin 2010-05-31 14:17:51

+0

drupal的默認類型是longtype,用於權限類型。 – anru 2010-05-31 22:26:05

4

您需要調整php.ini中的max_input_vars。通常的默認值是1000,但是有很多模塊,Drupal權限頁面很容易讓它失效。只需添加另一個零,如果您有權訪問php.ini並重新啓動apache,則將其設爲10000。 php.ini文件的位置取決於您的服務器配置。

我有同樣的問題,沒有在錯誤日誌中的錯誤,這爲我解決了它。