【发布时间】: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