5

Drupalサイトを構築していて、2つのカスタムメニューを追加して、2つの異なる管理リンクグループを提供しています(一部のユーザーにはどちらかのメニューが表示され、一部のユーザーには両方が表示され、匿名/低レベルのユーザーにはどちらも表示されません)。

問題は、現時点では、すべてのユーザーがメニューを表示できることです(ただし、メニュー項目は表示されません)。

単純な権限モジュールを作成しようとしています。また、どのメニューをどの役割で表示できるかを指定する管理フォームを作成しました。

しかし、特定のメニューの表示をオーバーライドできるフックが見つかりません。アイテムのみです。

では、データベースに権限のリストがあるので、Drupalの役割ごとにメニューへのアクセスを制限するにはどうすればよいですか?

-

役割ごとのメニューとメニューアクセスを見てきました。残念ながら、これらはアイテムレベルで機能し、メニューでは直接機能しません。

4

7 に答える 7

6

各メニューはブロック内にあり、特定のユーザーグループ(アクセスレベル)に対してブロックが表示されるように設定できます。drupal管理サイト:構造/ブロック

于 2012-02-01T10:27:56.427 に答える
2

役割ごとのメニューモジュール?

http://drupal.org/project/menu_per_role

于 2011-02-21T03:57:56.393 に答える
1

ブロックをメニューとして使用する限り、コアが提供するブロック設定の役割別アクセスを使用できます。

于 2011-02-28T12:18:13.353 に答える
0

メニューリストの場合、この関数は次のように機能します。menu_get_names();
ただし、権限チェックやフックはありません。
メニューリストをどこに制限したいですか?ノード編集時に、hook_form_alterを介してメニューを変更できる場合。

于 2011-02-21T04:54:09.930 に答える
0

これは最も洗練されたソリューションではありませんが、テーマでアクセスチェックを行うことができます。

于 2011-02-21T05:20:09.453 に答える
0

私は解決策を考え出しました-表示に自動生成されたメニューブロックを使用する代わりに、単一のブロックを作成し、モジュールに次のコードを配置しました:

function amh_menu_block($op = 'list', $delta = 0, $edit = array())
{
    if ($op == 'list') {
        $blocks[0] = array(
            'info' => t('AMH Menu block'),
            'weight' => 0,
            'status' => 1,
            'region' => 'left',
        );

        return $blocks;
    } elseif ($op == 'view') {
        switch($delta) {
            case 0:
                $block = array(
                    'subject' => '',
                    'content' => _amh_menu_display(),
                );

                break;
        }

        return $block;
    }
}

function _amh_menu_display()
{
    global $user;

    $content = '';

    if ($user->uid != 0) {
        $result = db_query('SELECT * FROM {amh_menu_permission} p LEFT JOIN {menu_custom} m ON p.menu_name = m.menu_name LEFT JOIN {users_roles} u ON p.rid = u.rid WHERE u.uid = %d OR p.rid = 2', $user->uid);
    } else {
        $result = db_query('SELECT * FROM {amh_menu_permission} p LEFT JOIN {menu_custom} m ON p.menu_name = m.menu_name WHERE p.rid = 1');
    }
    $menus = array();
    while ($m = db_fetch_object($result)) {
        $menu = menu_tree($m->menu_name);

        if ($menu) {
            $content .= "\r\n<h2>" . $m->title . "<h2>\r\n";
            $content .= theme_menu_tree($menu);
        }
    }

    return $content;
}

これはうまくいくようです。

于 2011-02-21T05:32:20.173 に答える
0

Menu Admin Per Menuモジュールを使用すると、役割ごとに各メニューへの編集アクセスを制限できます。https://www.drupal.org/project/menu_admin_per_menu

于 2020-08-31T18:46:37.963 に答える