5

我正在构建一个 Drupal 站点,并添加了两个自定义菜单来提供两组不同的管理链接(有些人会看到一个菜单或另一个,有些人会同时看到,而匿名/低级别用户都看不到)。

问题是,目前,所有用户都可以看到菜单(但菜单项不可见)。

我正在尝试创建一个简单的权限模块 - 并创建了管理表单,这些表单指定哪些菜单可由哪个角色查看。

但是我找不到一个可以让我覆盖特定菜单的可见性的钩子——只有项目。

那么,既然我在数据库中有权限列表,如何在 Drupal 中按角色限制对菜单的访问?

--

我查看了Menu per RoleMenu Access。不幸的是,这些在项目级别而不是直接在菜单上工作。

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 回答