Como ocultar um campo de usuário personalizado no perfil de usuário?

20

No Drupal 7, qual é a melhor maneira de impedir que um usuário não administrativo altere um campo de perfil de usuário personalizado?

Caso de uso: criei um campo de usuário chamado "ID do cliente" que não quero que o usuário (nenhum dos meus clientes reais) mude. O campo existe para minha própria referência e para uso programático em outros módulos. Não me importo que o usuário veja o ID do cliente, mas ele não deve poder editá-lo.

Devo substituir o modelo de página da página de perfil do usuário? Em caso afirmativo, como o modelo é alterado para tornar um campo somente leitura ou invisível?

Muito obrigado pela sua ajuda!

Chris

ctlarsen
fonte

Respostas:

17

Acho que Permissões de campo é o que você está procurando. Aqui está uma citação sobre ele (na página do projeto do módulo):

... permite que os administradores do site definam permissões em nível de campo para editar, visualizar e criar campos em qualquer entidade.

Características :

  • Habilite as permissões de campo em qualquer entidade, não apenas nos nós.
  • Permissões de campo baseadas em função que permitem diferentes visualizações padronizadas com base no acesso do usuário.
  • As permissões de autor permitem a visualização e edição de campos com base em quem é o proprietário da entidade.
  • As permissões para cada campo não são ativadas por padrão. Em vez disso, os administradores podem habilitar essas permissões explicitamente para os campos em que esse recurso é necessário.
  • Visão geral das permissões de campo
pasine
fonte
Obrigado, notme! Instalei o módulo Permissões de campo (a versão alfa é a mais recente, o que me deixa um pouco nervoso, mas tanto faz) e oculta o campo do usuário quando o usuário visualiza seu perfil. Depois de experimentar todas as configurações do módulo, não parece haver uma maneira de tornar o campo visível, mas somente leitura. Não é um requisito absoluto, mas seria bom ter.
Ctlarsen
Definir um campo como visível significa que um campo de texto é mostrado como texto sem formatação. Se você deseja manter o campo de texto e defini-lo como somente leitura, acho que você deve usar um hook_form_alter em seu formulário.
pasine 14/05
Mais uma vez obrigado, notme. Vou pegar a rota hook_form_alter e ver onde isso me leva. Parece que é o melhor caminho a percorrer.
Ctlarsen
O módulo Field Permissionsfunciona bem com Drupal 8, mas que poderia se esconder campos Eu acho que (i necessário para Hyde nome de usuário também), apenas sob encomenda
Sébastien Gicquel
5

Para ocultar o campo do formulário de perfil do usuário, você pode definir a #accesspropriedade de um campo como FALSE usando hook_form_FORMID_alter.

O seguinte snippet oculta o campo field_organisationdo formulário de perfil de usuário para não administradores:

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

Veja também esta pergunta semelhante sobre drupalanswers

Você também pode ocultar o campo da página de perfil do usuário (não do formulário) usando template_preprocess_user_profile

O seguinte snippet oculta o campo field_organisationda página do usuário para não administradores:

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

Parece haver um módulo chamado http://drupal.org/project/user_readonly "O módulo permite que um administrador impeça a modificação dos campos de conta / perfil de usuário. O administrador pode selecionar quais campos serão desaprovados ou quais serão permitido."

Jayesh Jose
fonte