Drupal用户访问回调选择性响应

时间:2011-12-02 15:31:56

标签: drupal access-denied user-permissions

请解释一下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 =':')in   第347行/var/www/vhosts/mysite.co.uk/httpdocs/includes/menu.inc

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

1 个答案:

答案 0 :(得分:0)

试试这个:

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的缓存,以便更改。