【问题标题】:Drupal user access callback selective responseDrupal 用户访问回调选择性响应
【发布时间】:2011-12-02 15:31:56
【问题描述】:

在我解释一些背景知识的同时,请耐心等待这个 Drupal API 新手!

当我的用户单击自定义节点创建链接时,我一直在尝试使用以下代码创建 2 个单独的响应。默认情况下,会打开一个页面,允许用户完成创建节点的常规步骤。 我的模块所做的是检查用户是否具有特定权限,并允许他们继续创建节点或抛出拒绝访问页面。

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
}

function mymodule_access_callback(){
  if( user_access('open sesame') ){
    drupal_set_message("successfully intecepting new node creation");
    return true;
  }
  return false;
}

节点/添加/页面被成功阻止,但在这两种情况下都是如此。 if 语句确定用户是否具有特定权限,并且在其中我添加了 return true 导致以下错误:

致命错误:require_once() [function.require]:打开失败 需要 '/node.pages.inc' (include_path='.:') 在 /var/www/vhosts/mysite.co.uk/httpdocs/includes/menu.inc 在第 347 行

作为一个新手,我不确定我需要做什么才能避免正确用户的访问被拒绝页面。

【问题讨论】:

  • 注意到 Drupal 没有为“node/add/page/%”定义任何菜单回调;您正在更改一个不存在的菜单项,在这种情况下您不应使用 hook_menu_alter()

标签: drupal access-denied user-permissions


【解决方案1】:

试试这个:

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
  $items["node/add/page/%"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';
}

编辑

尝试将上面的第二行更改为:

$items["node/add/page"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';

这是为您定义的路径的父项显式设置文件路径的尝试。

这也可能是一个愚蠢的说法,但每次您对 hook_menu_alter() 进行更改时,请确保您清除 Drupal 的缓存,以便获取更改。

【讨论】:

  • 对不起,没有区别
  • 乍一看原因是因为在node.module 中没有设置node/add/page/% 路径(请参阅node_menu())所以你实际上并没有改变任何东西,只是添加一个没有page callback 这就是您收到错误的原因。
  • 您可能是对的,但在菜单缺少回调的情况下,它应该恢复到最近的父级回调函数,不是吗。至少这是我在api.drupal.org/api/drupal/includes--menu.inc/group/menu/6阅读的内容@
  • 是的,你是对的,把它和你得到的错误信息放在一起让我认为 file 路径设置不正确(相对于节点模块,而不是根)因此上面的答案:/我唯一能想到的尝试是显式设置父项的路径。我将编辑上面的答案以向您展示我的意思
  • 感谢您上次更新的答案和代码。我今天可以尝试您的建议,但没有任何区别。我收到与我上面的原始帖子类似的错误。我对 API 的了解还不够,无法解决这个问题 :-(
猜你喜欢
  • 1970-01-01
  • 2016-06-20
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多