【问题标题】:Drupal menu permissions questionDrupal 菜单权限问题
【发布时间】:2010-10-20 03:58:56
【问题描述】:

我正在为我的客户创建一个管理模块,让他们可以访问有关其内容的某些管理功能。我首先通过实现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 部分,其中包含一个 Add project 子部分。都很好。

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

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

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

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

【问题讨论】:

    标签: drupal drupal-6 permissions menu


    【解决方案1】:

    您的问题是他们被允许查看这些页面。

    来自系统模块的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 将这些菜单项的访问设置更改为他们无权访问的内容。自己烫发或使用现有烫发。
    • 您也可以使用您的主题来隐藏项目。

    【讨论】:

    • 啊。这也解释了为什么不显示报告部分。它设置为“访问站点报告”访问权限而不是“访问管理页面”。我想我沿着 hook_menu_alter 路径走下去。这似乎是更合适的做法。谢谢!
    【解决方案2】:

    我不确定菜单路由器显示这些的确切原因。不过我或许能帮上忙……

    为什么不将路径更改为:

    projects/add  
    projects/%/edit
    

    这类似于节点模块的菜单挂钩。它可能不是您正在寻找的东西,但如果您不希望这些用户访问管理内容,这可能是正确的方法。

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 2018-01-06
      • 2017-05-25
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多