在 Drupal 7 中根据用户角色限制字段列表条目

Posted

技术标签:

【中文标题】在 Drupal 7 中根据用户角色限制字段列表条目【英文标题】:Restricting Field List Entries Based on User Role in Drupal 7 【发布时间】:2011-11-04 13:14:51 【问题描述】:

在 Drupal 7 中有没有办法根据用户角色来限制字段列表的内容?

例如:

对于用户角色 1,我希望显示自定义字段列表:

苹果香蕉葡萄橙

对于用户角色 2,我希望显示自定义字段列表:

苹果葡萄

字段权限模块允许您根据角色限制访问以显示和编辑列表,但我正在寻找更精细的东西来根据角色限制对列表中项目的访问。

【问题讨论】:

您可以使用drupal.org/project/references 并使用其内置函数来显示一个视图,该视图会打印出选项。然后,在视图中为用户角色添加条件。让我知道这种方法是否有效,您需要更多帮助。 Alex,我已经安装了参考资料,并且我知道如何构建视图,但我对你的其余解释一无所知。 确实,我必须道歉,我认为这很容易实现,但事实并非如此!然而,一个非常老套的方法是创建一个带有标题和用户角色列表的内容类型,并为每个选项创建一个该内容类型的节点。然后,在视图中,仅显示该内容类型。接下来,您必须编辑视图模板(在视图中:高级>主题>信息)。在那里,检查当前用户(global $user)是否具有相应的角色,然后打印出该行。但应该有更好的方法。也许正在搜索用户权限分类模块?还是规则模块? 【参考方案1】:

您可以在自己的模块中实现hook_field_widget_form_alter(),并根据您喜欢的任何标准删除某些选项。例如:

function MYMODULE_field_widget_form_alter(&$element, &$form_state, $context) 
  if ($context['field_name'] == 'field_MY_FIELD') 
    // Users without the "administer nodes" permission should not see the
    // "Banana" and "Orange" options.
    if (!user_access('administer nodes')) 
      unset($element['#options']['banana'], $element['#options']['orange']);
    
  

有关hook_field_widget_form_alter() 的更多信息,请参阅http://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_widget_form_alter/7。

【讨论】:

请注意,正确的代码是:if ($context['field']['field_name'] == 'field_MY_FIELD'),因为 $context 没有 field_name 直接子代。【参考方案2】:

我们可以在没有任何自定义模块的情况下简单地通过使用 alex 提到的参考视图来做到这一点。 需要的是“选择当前用户作为过滤器”。

准备一个内容类型 user_category,您可以在其中保存针对类别的用户名, 例如

用户:1 - 类别:- 苹果、葡萄、香蕉 用户 2 - 类别:苹果、葡萄等

以当前用户的身份形成类型引用和过滤器的视图,您就完成了。

在内容中使用字段类型作为参考,在字段选项中选择视图。

【讨论】:

以上是关于在 Drupal 7 中根据用户角色限制字段列表条目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Drupal 7 中创建一个仅显示基于当前用户字段的过滤列表的视图

如何向 Drupal 7 Organic Groups 角色成员发送电子邮件?

如何在drupal 7视图中按角色和用户ID显示用户评论

Drupal7 根据用户组织过滤可见的网络表单

如何在 Drupal 7 视图中使用当前用户作为相关字段?

Drupal 7:如何根据当前页面内容过滤视图内容(带有实体引用字段)