Drupal 7 hook_node_access不允许“拒绝”?
问题描述:
我创建了一个简单的模块: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处看到节点?
答
当实现Drupal钩子时,你应该总是用你的自定义模块名称替换'钩子'。例如:
function mymodule_node_access($node, $op, $account)
{
return NODE_ACCESS_DENY;
}
此外,您将需要去管理/配置/开发/性能在每次实施新的钩时间清除掉Drupal的缓存