0

我正在尝试针对特定的内容类型,以便匿名用户在任何时候尝试访问内容类型的页面时都会给他们一个未经授权的消息。为此,我认为我需要使用 hook_menu_alter() 并向其添加访问回调。(这是一个 Drupal 6 站点)。

我遇到的问题是我真的不知道如何向菜单系统识别该内容类型的节点。我知道生成的 URL 类似于“name-and-biography/name-and-biography-%username”。所以我尝试了这个和其他一些组合,但似乎无法让它发挥作用。

我基本上试过这个:

function mysite_profile_menu_alter(&$items) {
  //Restrict access to profile pages
  $items['name-and-biography/%title']['access callback'] = 'mysite_profile_content_access';
}


function mysite_profile_content_access() {
  //Check to make sure they are an authenticated user
  GLOBAL $user;

  foreach ($user->roles as $role) {
    if ($role == 'authenticated user') {
      return TRUE;
    }
  }

  return FALSE;
}

我也尝试过像“name-and-biography/%”和“name-and-biography/*”这样的项目路径。它似乎不起作用。默认的 URL 别名设置为“[type-name]/[title-raw]”。并且标题生成设置为“[type-name] - ([author-name])”。

我也尝试使用 hook_access(),但这似乎没有运行。即使在多次刷新所有缓存之后。这两种选择似乎都不是。

有没有人知道我需要如何在我的 hook_menu_alter() 中定位它?或者让 hook_access() 工作?还是有其他想法?我确实尝试了内容访问模块,但它在我们的网站上产生了问题。因此,另一种选择将是首选。

谢谢!

4

2 回答 2

1

实施hook_nodeapi()以检查访问view

/**
 * Implementation of hook_nodeapi().
 */
function MODULE_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  global $user;

  switch ($op) {
    case 'view':
      if ($node->type == 'CONTENT_TYPE' && $user->uid < 1) {
        drupal_access_denied();
        exit;
      }
      break;
  }
}
于 2012-06-29T21:55:21.880 回答
0

hook_menu_alter 是关于更改现有项目(路径,如 /admin、/node/%、admin/reports/status 等)。如果要添加新菜单项,请改用 hook_menu()。此外,您没有定义页面回调,因此这也不是有效的 hook_menu()。

通常要引入新的权限级别,我们使用 hook_perm() 来添加新的权限项。因此,您不必硬编码允许哪些角色访问内容。您也可以尝试内容访问模块。

请参阅http://drupalcode.org/project/examples.git/blob/refs/heads/6.x-1.x:/node_access_example/node_access_example.module,这是一个很好的节点访问示例。

于 2012-06-29T19:53:34.053 回答