当前位置: 首页>>技术教程>>正文


如何隐藏用户配置文件中的自定义用户字段?

webfans 技术教程 , , , 去评论

问题描述

在Drupal 7中,阻止任何non-administrative用户更改自定义用户配置文件字段的最佳方法是什么?

使用案例:我创建了一个名为”Customer ID”的用户字段,我不希望用户(我的任何实际客户)更改。该字段可供我自己参考,也可用于其他模块的程序化使用。我不介意用户看到客户ID,但他们不应该编辑它。

我应该覆盖用户个人资料页面的页面模板吗?如果是这样,模板如何更改为使字段read-only或不可见?

非常感谢您的帮助!

克里斯

最佳解决方案

我认为Field Permissions正是您所需要的。这是关于它的引用(来自模块的项目页面):

… allows site administrators to set field-level permissions to edit, view and create fields on any entity.

Features:

  • Enable field permissions on any entity, not just nodes.
  • Role-based field permissions allowing different viewing patterned based on what access the user has.
  • Author-level permissions allow viewing and editing of fields based on who the entity owner is.
  • Permissions for each field are not enabled by default. Instead, administrators can enable these permissions explicitly for the fields where this feature is needed.
  • Field permissions overview

次佳解决方案

要从用户配置文件表单隐藏字段,可以使用hook_form_FORMID_alter将字段的#access属性设置为FALSE。

以下代码段隐藏了non-admins的用户配置文件表单中的字段field_organisation

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

See also this similar question on drupalanswers

您还可以使用template_preprocess_user_profile从用户个人资料页面(而不是表单)隐藏该字段

以下代码段隐藏了non-admins用户页面中的field_organisation字段:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2278.html,转载请务必附带本地址声明。