2010-07-05 62 views
1

我運行drupal 6並希望對此功能進行編碼: 在用戶填寫表單後,他可以單擊一個額外的按鈕,這將使表單只爲他讀取。使用drupal模塊更改節點訪問權限

我想到了一個hidden_​​field和一個額外的按鈕,用戶點擊額外的按鈕後,將hidden_​​field設置爲真實狀態。當我加載節點並且hidden_​​field具有真實狀態時,我想要將節點中的所有字段設置爲只讀。 (hook_access,node_access?!?)

PUH ..希望這一切是不是太混亂(因爲即使我現在有點糊塗了......)

回答

3

首先,你將無法阻止別人誰有權訪問數據庫或root用戶查看數據(至少不是沒有加密)。

就正常的站點操作而言,這並不是很難做到。你需要調用的兩個鉤子是hook_node_grants()hook_node_access_records(),這裏有一個很好的例子,在問題here中這也是你想要的。

簡單地說,hook_node_access_records()返回一個結構詳細信息relms和id,它可以對它執行操作,而hook_node_grants()返回用戶的relms和id。如果兩者匹配,則授予訪問權限(讀取或寫入)。

這給了你很大的靈活性。一個例子是人們只能閱讀由具有相同星號的其他人創建的節點。在hook_node_grants你會檢查用戶對象來獲取starsign並返回$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和group id匹配用戶將被授予讀取權限。