代码之家  ›  专栏  ›  技术社区  ›  Luke

Drupal菜单权限问题

  •  0
  • Luke  · 技术社区  · 15 年前

    我正在为我的客户机创建一个管理模块,使他们能够访问与其内容相关的一些管理功能。我首先在模块中添加一些权限,然后实现 hook_perm :

    function mymodule_perm() 
    {
        return array(
            'manage projects',
        );
    }
    

    然后我可以通过添加到 管理员 已存在的部分:

    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;
    }
    

    这将增加一个 项目 到管理区域的分区 添加项目 分部。一切都好。

    我想要的行为是,我的客户机只有在登录时才能看到项目部分。我通过在我的模块的权限部分勾选认证用户的“管理项目”权限来实现这一点。现在,要让我的客户机实际访问管理区域,我还需要在“用户权限”部分的“系统模块”下勾选“访问管理页”。这很好,当我以客户身份登录时,我只能看到 项目 行政区的分区。不过,有一件事是,在我的导航菜单(如左列所示)中,我可以看到以下各项:

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

    我只希望看到“管理”和“项目”项目,而不是其他项目。当我单击例如“内容管理”时,会得到一个标题为“页面”的内容管理,没有子部分。对于站点构建、站点配置和用户管理也是如此。真正奇怪的是没有显示报表,这也是一个顶级管理部分。

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   googletorp    15 年前

    你的问题是允许他们查看那些页面。

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

    我不清楚为什么菜单路由器会显示这些。但我也许能帮助…

    你为什么不把你的路改成:

    projects/add  
    projects/%/edit
    

    这类似于节点模块的菜单挂钩。这可能不是你想要的,但如果你不想这些用户有权访问管理的东西,这可能是正确的方式。