【问题标题】:Drupal 7 - Menu items display depending on roles and viewsDrupal 7 - 菜单项根据角色和视图显示
【发布时间】:2014-03-14 09:50:37
【问题描述】:

我正在开发一个 Drupal 项目,该项目需要很少的分层用户角色。高级用户将具有某些管理员角色,但也会有两个较低级别的角色——销售人员和标准客户。销售人员角色需要能够创建标准客户,然后查看与他们创建的任何客户相关的数据。

由于我使用的是 profile2,典型的用户帐户任务菜单如下所示

http://oi57.tinypic.com/333v447.jpg

现在,当登录用户是销售人员角色并且他们转到“我的帐户”时,他们不应该看到我的订阅、订单或发票。供应商详细信息 profile2 链接也应禁用。但由于他们可以查看他们添加到系统中的客户数据,因此如果他们查看其他用户屏幕,则必须显示这些链接

在代码方面,我为初学者尝试了以下想法

function mymodules_menu_alter(&$menu) {
  global $user;

  $viewed_user_id = null;
  $uid = arg(1);
  if ( arg(0) == 'user' && is_numeric($uid) ) {
    $viewed_user_id = $uid;
  }

  if (in_array('sales executive', $user->roles) && $viewed_user_id == $user->uid ) {    
    unset($menu['user/%user_category/edit/vendor_details']);
  }

  if (in_array('sales executive', $user->roles) ) {    
    unset($menu['user/%user/user-recurring-entities']);
  }
}

问题是,第一次检查 vendor_details 的行为很奇怪。它要么显示所有角色的菜单,要么不显示任何角色。我认为缓存可能会影响这一点?

第二个检查根本不起作用,因为 $menu 数组中不存在这样的菜单条目。

所以我的基本问题是,如何让整个事情发挥作用?也许我的方法是错误的?

【问题讨论】:

    标签: menu module drupal-7 roles


    【解决方案1】:

    这绝对是一个有趣的方法。

    Drupal 菜单内置了权限检查,理论上,如果您没有访问某个页面的权限,菜单链接将不会出现。这是默认行为。

    例如。我们以“订单”为例,如果订单页面是使用视图构建的,您可以编辑视图,并将视图权限设置为针对特定角色或 Drupal 权限。

    当然,您可以使用多种方式来组合您的页面,例如。视图是一个,面板是另一个,或者只是简单的 hook_menu。但或多或少你应该使用权限访问而不是直接使用菜单。有时您需要编写自己的权限版本,这就是您在代码中所做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多