Drupal菜单权限问题

时间:2010-04-08 11:28:58

标签: drupal drupal-6 permissions menu

我正在为我的客户端创建一个管理模块,使他们可以访问有关其内容的某些管理功能。我首先通过实现hook_perm

在我的模块中添加一些权限
function mymodule_perm() 
{
    return array(
        'manage projects',
    );
}

然后,我可以通过添加到已存在的 admin 部分来创建我的菜单:

function mymodule_menu() 
{
    $items['admin/projects'] = array(
        'title' => 'Projects',
        'description' => 'Manage your projects.',
        'page callback' => 'manage_projects_overview',
        'access callback' => 'user_access',
        'access arguments' => array('manage projects'),
        'type' => MENU_NORMAL_ITEM,
        'weight' => -100,
    );

    $items['admin/projects/add'] = array(
        'title' => 'Add project',
        'access arguments' => array('manage projects'),
        'page callback' => 'mymodule_projects_add',
        'type' => MENU_NORMAL_ITEM,
        'weight' => 1,
    );

    return $items;
}

这将使用添加项目子部分将项目部分添加到管理区域。一切都好。

我想要的行为是我的客户端只能在登录时看到“项目”部分。我已经通过勾选模块权限部分中经过身份验证的用户的“管理项目”权限来完成此操作。现在为了让我的客户端实际访问管理区域,我还需要在用户权限部分的“系统模块”下勾选“访问管理页面”。这很好用,当我以客户端身份登录时,我只能看到管理区域中的 Projects 部分。但有一件事,在左栏中显示的导航菜单中,我可以看到以下项目:

- Administer
   - Projects
   - Content management
   - Site building
   - Site configuration
   - User management

我只期待看到管理和项目项目,而不是其他项目。当我点击例如内容管理我得到一个没有子部分的内容管理标题页面。站点构建,站点配置和用户管理也是如此。真正奇怪的是,报告没有显示,这也是一个顶级的管理部门。

除了我的“项目”部分之外,为什么还会显示这些其他项目?如果我没有以管理员身份登录,如何阻止它们出现?

2 个答案:

答案 0 :(得分:2)

您的问题是他们可以查看这些页面。

来自系统模块的hook_menu

$items['admin/build'] = array(
  'title' => 'Site building',
  'description' => 'Control how your site looks and feels.',
  'position' => 'right',
  'weight' => -10,
  'page callback' => 'system_admin_menu_block_page',
  'access arguments' => array('access administration pages'),
  'file' => 'system.admin.inc',
);

所以当你给他们access administration pages时,你给了他们访问网站建设部分的权限,但没有给他们任何项目。解决这个问题的一个快速方法是:

  • 使用hook_menu_alter将这些菜单项的访问设置更改为他们无权访问的内容。要么制作自己的烫发器,要么使用现有的烫发器。
  • 您还可以使用主题隐藏项目。

答案 1 :(得分:1)

我不确定菜单路由器显示的原因。但我可以帮忙......

为什么不改变你的道路:

projects/add  
projects/%/edit

这类似于节点模块的菜单钩子。它可能不是您正在寻找的,但如果您不希望这些用户可以访问管理员资料,那么它可能是正确的方式。