Field Permissions
Establece permisos a nivel de campo para controlar quién puede crear, editar o ver campos específicos en cualquier tipo de entidad.
field_permissions
Install
composer require 'drupal/field_permissions:8.x-1.4'
composer require 'drupal/field_permissions:8.x-1.3'
Overview
El módulo Field Permissions permite a los administradores del sitio establecer permisos granulares a nivel de campo para campos adjuntos a cualquier tipo de entidad (nodes, usuarios, términos de taxonomía, etc.). Esto proporciona un control de acceso detallado más allá de los permisos estándar a nivel de entidad que proporciona Drupal.
Los permisos pueden configurarse para ver o editar campos en todos los contextos, o solo cuando el campo pertenece a contenido propiedad del usuario actual. También se pueden establecer permisos especiales para editar campos durante la creación de entidades.
Los permisos de campo no están habilitados por defecto. Los administradores deben habilitar explícitamente los permisos para cada campo donde se necesite este nivel de control de acceso, manteniendo los sitios simples mientras se permite un control avanzado cuando sea necesario.
Features
- Control de acceso a nivel de campo para cualquier tipo de entidad (nodes, usuarios, términos de taxonomía, comentarios, etc.)
- Tres modos de permisos: Público (hereda permisos de entidad), Privado (solo autor y administrador), y Personalizado (matriz completa de permisos)
- Los permisos personalizados incluyen cinco operaciones por campo: Crear valor propio, Editar valor propio, Editar valor de cualquiera, Ver valor propio, Ver valor de cualquiera
- Informe centralizado de permisos de campo que muestra el estado de permisos para todos los campos de un vistazo
- Indicadores visuales que muestran si todos los usuarios o solo algunos usuarios tienen permisos específicos
- Matriz de permisos integrada directamente en el formulario de configuración del campo para facilitar la configuración
- Soporte para control de acceso de filtros de campo en JSON:API
- Sistema de plugins extensible para tipos de permisos personalizados
- Soporte de migración de Drupal 7 a Drupal 8/9/10/11
- Funciona con cualquier tipo de entidad que soporte campos configurables
Use Cases
Campos privados de perfil de usuario
Crea campos privados en perfiles de usuario que solo el propio usuario (y administradores) pueden ver. Por ejemplo, almacena información sensible como números de teléfono o direcciones que los usuarios pueden ver y editar en su propio perfil pero no pueden ver en los perfiles de otros usuarios.
Campos de flujo de trabajo editorial
Añade campos a tipos de contenido que solo los editores y administradores pueden ver y editar. Por ejemplo, un campo 'Notas editoriales' que los autores de contenido no pueden ver, permitiendo a los editores dejar comentarios internos sobre el contenido.
Acceso a contenido premium
Crea campos que almacenan contenido premium visible solo para suscriptores de pago. Otorga permiso de 'ver' solo al rol 'suscriptor' mientras permite a todos los usuarios autenticados ver el resto del contenido.
Verificación de propiedad de contenido
Permite a los usuarios editar ciertos campos solo en su propio contenido. Por ejemplo, los usuarios pueden actualizar un campo 'Estado' en nodes que crearon pero no pueden modificar este campo en contenido creado por otros.
Información de contacto solo para personal
En un directorio de personal, haz que ciertos campos de contacto (como números de teléfono personales) sean privados para que solo el miembro del personal pueda ver su propia información, mientras que la información de contacto pública permanece visible para todos.
Moderación y control de calidad
Añade campos para puntuaciones internas de calidad o indicadores de moderación que los moderadores pueden editar en cualquier contenido pero los autores no pueden ver, permitiendo flujos de trabajo de moderación transparentes sin exponer procesos internos a los creadores de contenido.
Tips
- Siempre prueba las configuraciones de permisos de campo con una cuenta que no sea administrador para verificar que funcionan como se espera
- Usa el informe de Permisos de campo en Administración > Informes > Permisos de campo para obtener una visión rápida de todas las configuraciones de permisos de campo
- Recuerda que las configuraciones de permisos se aplican a todas las instancias de un almacenamiento de campo, no a instancias individuales de campo - cambiar permisos en un bundle afecta a todos los bundles que usan ese campo
- Al migrar desde Drupal 7, las configuraciones de permisos de campo se migrarán automáticamente si tienes el módulo Field Permissions habilitado durante la migración
- Considera usar el modo 'Privado' para acceso simple solo del autor en lugar de configurar permisos personalizados complejos
- El permiso 'access private fields' es un permiso poderoso - solo otórgalo a roles de alta confianza
Technical Details
Admin Pages 2
/admin/reports/fields/permissions
Un informe completo que muestra todos los campos del sistema y su configuración actual de permisos. Para cada campo, muestra el nombre del campo, tipo de campo, tipo de entidad, bundles donde se usa y estado de permisos. Los campos con permisos personalizados muestran indicadores visuales para cada tipo de permiso (Crear, Editar propio, Editar de cualquiera, Ver propio, Ver de cualquiera) indicando si todos los usuarios tienen ese permiso o no.
/admin/structure/types/manage/{bundle}/fields/{field_config}/edit
Al editar la configuración de cualquier campo, se añade una sección 'Visibilidad y permisos del campo' en la parte inferior del formulario (visible solo para usuarios con permiso 'administrar permisos de campo'). Esto permite configurar el control de acceso por campo. Nota: Esta sección no aparece en campos de comentarios.
Permissions 7
Hooks 4
hook_entity_field_access
Implementa el control de acceso a campos delegando al plugin de tipo de permiso apropiado. Devuelve AccessResult::forbidden() si el usuario no tiene acceso al campo según el tipo de permiso configurado.
hook_field_permission_type_plugin_alter
Permite a los módulos alterar los plugins de tipo de permiso de campo descubiertos. Puede usarse para eliminar, modificar o reemplazar plugins de tipo de permiso.
hook_jsonapi_entity_field_filter_access
Controla el acceso a campos al filtrar vía JSON:API. Previene el acceso a campos con permisos restringidos en consultas de filtro de JSON:API.
hook_migration_plugins_alter
Añade el plugin de proceso d7_field_permission_settings para migrar configuraciones de permisos de campo desde Drupal 7.
Troubleshooting 5
Asegúrate de tener el permiso 'Administrar permisos de campo'. También nota que los permisos de campo no están disponibles para campos de comentarios.
Los permisos personalizados solo aparecen después de que un campo se configura para usar el tipo 'Permisos personalizados'. Establece primero el campo para usar permisos personalizados, luego los permisos aparecerán en Administración > Personas > Permisos.
Esto es por diseño. Los roles de administrador automáticamente tienen todos los permisos, incluyendo permisos de campo. Las casillas de verificación están deshabilitadas para indicar esto.
Para permisos personalizados, asegúrate de que el rol tenga el permiso 'Crear valor propio para el campo'. Para campos privados, todos los usuarios pueden editar campos privados en entidades que están creando.
Este es el comportamiento esperado. Los usuarios no pueden filtrar por campos a los que no tienen acceso de visualización. Otorga el permiso de visualización apropiado para permitir el filtrado.
Security Notes 5
- El permiso 'administrar permisos de campo' solo debe otorgarse a administradores de confianza ya que permite configurar el acceso a todos los campos
- El permiso 'access private fields' evita todas las restricciones de campos privados - úsalo con extrema precaución
- Los permisos de campo añaden una capa de control de acceso pero no encriptan datos - los datos sensibles aún deben protegerse a nivel de base de datos si es necesario
- Al usar permisos personalizados, audita regularmente qué roles tienen acceso a campos sensibles
- Recuerda que los usuarios con acceso administrativo completo (uid 1 o roles marcados como admin) evitan todas las verificaciones de permisos de campo