Permissions by Term
Restringe el acceso a nodos y términos de taxonomía basándose en cuentas de usuario y/o roles de usuario asignados a términos de taxonomía específicos.
permissions_by_term
Install
composer require 'drupal/permissions_by_term:^3.1'
Overview
El módulo Permissions by Term extiende Drupal proporcionando funcionalidad para restringir el acceso a nodos individuales mediante términos de taxonomía. Los permisos de términos de taxonomía pueden vincularse a cuentas de usuario específicas y/o roles de usuario. Esto permite a los administradores del sitio construir áreas de contenido con acceso restringido en sus sitios web utilizando la funcionalidad de taxonomía del núcleo de Drupal.
Dado que Permissions by Term utiliza el sistema de Node Access Records de Drupal, todos los demás sistemas del núcleo que dependen del acceso a nodos respetarán estas restricciones, incluyendo: resultados de búsqueda, menús, vistas y acceso directo a nodos.
El módulo proporciona una solución ligera de control de acceso que restringe el acceso de usuarios a nodos de Drupal específicos basándose en términos de taxonomía, una parte fundamental de la funcionalidad de Drupal. Esto permite la restricción de acceso al contenido dependiendo de muy poco código contribuido.
Features
- Restringir el acceso a nodos basándose en permisos de términos de taxonomía asignados a usuarios o roles
- Soporta permisos de términos tanto específicos por usuario como basados en roles
- Soporte multilingüe: los permisos son conscientes del idioma y se almacenan por idioma
- Se integra con el sistema de Node Access Records de Drupal para un control de acceso consistente en búsquedas, menús y vistas
- Formulario de configuración para configurar el modo de permisos, limitaciones de vocabulario y opciones de visualización
- Muestra información de permisos en los formularios de edición de nodos indicando los usuarios y roles permitidos
- Integración con el formulario de usuario permitiendo a los administradores asignar permisos de términos directamente a los usuarios
- Filtrado automático de autocompletado de términos basado en los permisos del usuario
- Comando Drush para reconstruir los permisos de acceso a nodos
- Soporte de plugin de migración para importar permisos de términos
- Sistema de eventos para reaccionar a escenarios de acceso denegado
- Sistema de caché para rendimiento optimizado con almacenamiento en caché de resultados de acceso
- Submódulo (Permissions by Entity) que extiende la funcionalidad a entidades que no son nodos
Use Cases
Sitio de Membresía con Contenido Premium
Crear un vocabulario 'Acceso de Miembro' con términos como 'Gratuito', 'Premium', 'VIP'. Asignar el permiso del término 'Premium' al rol 'Miembro Premium'. Etiquetar el contenido con términos de acceso apropiados. Los usuarios gratuitos ven solo contenido 'Gratuito', mientras que los miembros premium ven tanto contenido gratuito como premium.
Sitio Web Escolar con Acceso Basado en Roles
Crear un vocabulario 'Audiencia' con términos como 'Estudiantes', 'Profesores', 'Administradores'. Asignar permisos de términos a los roles de usuario correspondientes. El contenido etiquetado con 'Profesores' solo es visible para usuarios con el rol de profesor. Esto permite diferentes secciones de contenido para diferentes partes interesadas de la escuela.
Intranet Corporativa con Acceso Basado en Departamentos
Crear un vocabulario 'Departamento' con términos para cada departamento (RRHH, Ingeniería, Ventas). Asignar términos de departamento a los usuarios en el formulario de perfil de usuario. Etiquetar documentos internos y páginas con términos de departamento. Los empleados solo ven contenido relevante para su departamento.
Flujo de Trabajo de Moderación de Contenido
Habilitar el ajuste 'Deshabilitar registros de acceso a nodos' y usar permisos para controlar quién puede editar contenido no publicado durante la revisión editorial. Esto permite a los editores trabajar en contenido sin que aparezca en listados públicos hasta que se publique.
Acceso a Contenido Multilingüe
Dado que los permisos se almacenan por idioma, crear restricciones de contenido específicas por idioma. Un término puede conceder acceso para la versión en inglés pero no para la versión en alemán del contenido, útil para licencias de contenido regionales.
Tips
- Siempre reconstruir los permisos de acceso a nodos después de cambios masivos en permisos de términos usando el comando Drush
- Usar el ajuste 'Limitar por vocabularios de taxonomía' para restringir qué vocabularios se usan para permisos, mejorando el rendimiento
- Habilitar 'Ocultar información de permisos de términos en el formulario de nodo' en sitios con muchos permisos para una carga más rápida del formulario de nodo
- El ajuste 'Requerir todos los términos concedidos' es útil para crear contenido que requiere múltiples niveles de acceso
- Los usuarios con el permiso 'bypass node access' siempre tendrán acceso independientemente de los permisos de términos
- Considerar usar el submódulo Permissions by Entity si necesita restringir el acceso a media, paragraphs u otros tipos de entidades personalizadas
Technical Details
Admin Pages 1
/admin/permissions-by-term/settings
Configurar los ajustes globales del módulo Permissions by Term incluyendo modos de permisos, restricciones de vocabulario y opciones de visualización.
Permissions 4
Hooks 8
hook_node_access_records
Implementa registros de acceso a nodos para permisos basados en términos. Crea registros de concesión en la tabla node_access para nodos con términos restringidos.
hook_node_grants
Proporciona las concesiones que un usuario tiene para ver nodos. Devuelve GIDs a los que el usuario tiene permitido acceder basándose en sus permisos de términos.
hook_node_access
Verifica el acceso a nodos y despacha un evento de denegación si el acceso está restringido.
hook_form_taxonomy_term_form_alter
Añade el conjunto de campos de permisos a los formularios de edición de términos de taxonomía permitiendo que se asignen usuarios y roles de acceso.
hook_form_user_form_alter
Añade la interfaz de asignación de permisos de términos a los formularios de edición de usuarios.
hook_options_list_alter
Filtra las opciones de términos de taxonomía en listas de selección basándose en los permisos del usuario.
hook_taxonomy_term_delete
Limpia los permisos de términos cuando se elimina un término de taxonomía.
hook_user_cancel
Elimina todos los permisos de términos de un usuario cuando su cuenta es cancelada.
Drush Commands 1
drush permissions-by-term:rebuild
Reconstruye los registros de acceso a nodos para todos los nodos gestionados por Permissions by Term. Útil después de cambios masivos en permisos de términos o cuando los registros de acceso pierden sincronización.
Troubleshooting 5
Ejecutar la reconstrucción de acceso a nodos en /admin/reports/status/rebuild o usar 'drush permissions-by-term:rebuild'. Asegurarse de que el módulo Dynamic Page Cache está habilitado.
Habilitar 'Deshabilitar registros de acceso a nodos' en la configuración si tiene muchos nodos. Esto mejora el rendimiento en listados grandes no cacheados pero elimina el control de acceso de Views.
El modo de permiso requiere concesiones explícitas. Asegurarse de que los usuarios tienen al menos un permiso de término asignado, o deshabilitar el modo de permiso para acceso abierto por defecto.
Asegurarse de que el KernelEventListener funciona correctamente. Verificar que los usuarios no tienen el permiso 'bypass node access' que anula todas las restricciones.
Asegurarse de que 'Deshabilitar registros de acceso a nodos' está desmarcado en la configuración. Verificar que el módulo Dynamic Page Cache está habilitado.
Security Notes 6
- El módulo usa el sistema de Node Access Records de Drupal, que es la forma recomendada de implementar control de acceso al contenido
- Los usuarios con el permiso 'bypass node access' evitarán todas las restricciones basadas en términos
- A los usuarios anónimos (uid 0) se les puede conceder acceso a términos específicos como a los usuarios autenticados
- Los permisos de términos son específicos del idioma - una concesión de permiso en inglés no se aplica automáticamente a otras versiones de idioma
- El permiso 'show term permission form on term page' está marcado como 'restrict access' - solo conceder a roles de confianza
- Siempre probar exhaustivamente las configuraciones de permisos antes de desplegar a producción