2015-02-10 70 views
0

我創建了一個簡單的模塊:Drupal 7 hook_node_access不允許「拒絕」?

function hook_node_access($node, $op, $account) 
{ 
    return NODE_ACCESS_DENY; 
} 

它確實阻止訪問節點,但我得到訪問該頁面時,此錯誤:

Notice: Trying to get property of non-object in node_node_access() (line 3089 of \www\modules\node\node.module). 

該行的內容:

3088. function node_node_access($node, $op, $account) { 
3089.  $type = is_string($node) ? $node : $node->type; 

所以基本上,當我這樣做時,$ node不是一個字符串,但也沒有「type」值。我只能想象當$ node到達這部分代碼時它是一個空白對象。但爲什麼?

UPDATE

我做的「節點」對象的後續代碼var_dump,我相信這是內容:

int(436) 

所以,在某種程度上,節點ID被越來越推到這個功能,但而不是節點,並且is_string函數沒有選擇它是一個字符串(因爲它不是,它是一個INT)。

任何想法?

更新2:

是什麼使所有這些真的對我不好,就是即使我登錄到Drupal的作爲不具有訪問這些節點的用戶,他們仍然可以看到他們,如果他們去/節點並滾動頁面。

我錯過了一些東西,因爲hook_node_access應該阻止在/ node處看到節點?

回答

0

當實現Drupal鉤子時,你應該總是用你的自定義模塊名稱替換'鉤子'。例如:

function mymodule_node_access($node, $op, $account) 
{ 
    return NODE_ACCESS_DENY; 
} 

此外,您將需要去管理/配置/開發/性能在每次實施新的鉤時間清除掉Drupal的緩存

相關問題