2015-02-10 89 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的缓存

相关问题