mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/site_users.git
synced 2026-03-10 18:27:42 -03:00
feat: Descoberta dinâmica de campos de usuário editáveis
hook_entity_field_access() passa a cobrir todos os FieldConfigInterface do usuário, sem lista hardcoded. Campos de referência a mídia usam lógica de fotos; demais usam lógica de perfil. SiteUsersSettingsForm descobre campos dinamicamente via entity_field.manager, listando todos os campos configuráveis do usuário independente do módulo que os define. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ use Drupal\Core\Field\FieldDefinitionInterface;
|
||||
use Drupal\Core\Field\FieldItemListInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\field\FieldConfigInterface;
|
||||
use Drupal\media\MediaInterface;
|
||||
use Drupal\user\UserInterface;
|
||||
|
||||
@@ -51,31 +52,20 @@ function site_users_entity_field_access($operation, FieldDefinitionInterface $fi
|
||||
return AccessResult::neutral();
|
||||
}
|
||||
|
||||
// Lista de campos controlados pelo módulo.
|
||||
$profile_fields = [
|
||||
'field_user_name',
|
||||
'field_user_phone',
|
||||
'field_user_social_links',
|
||||
'field_user_bio',
|
||||
];
|
||||
|
||||
$photo_fields = [
|
||||
'field_user_photos',
|
||||
'field_user_default_photo',
|
||||
];
|
||||
$field_name = $field_definition->getName();
|
||||
|
||||
// Verificar se é um campo de perfil.
|
||||
if (in_array($field_name, $profile_fields)) {
|
||||
return site_users_check_profile_field_access($operation, $account, $items, $field_name);
|
||||
// Apenas campos configuráveis (não campos base como name, mail, status).
|
||||
if (!($field_definition instanceof FieldConfigInterface)) {
|
||||
return AccessResult::neutral();
|
||||
}
|
||||
|
||||
// Verificar se é um campo de fotos.
|
||||
if (in_array($field_name, $photo_fields)) {
|
||||
$field_name = $field_definition->getName();
|
||||
|
||||
// Campos de referência a mídia usam lógica de fotos.
|
||||
if ($field_definition->getType() === 'entity_reference'
|
||||
&& $field_definition->getSetting('target_type') === 'media') {
|
||||
return site_users_check_photo_field_access($operation, $account, $items, $field_name);
|
||||
}
|
||||
|
||||
return AccessResult::neutral();
|
||||
return site_users_check_profile_field_access($operation, $account, $items, $field_name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user