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 に答える