Nodeaccess
Proporciona control de acceso por nodo, permitiendo gestionar permisos (ver, editar, eliminar) para nodos individuales por rol de usuario y usuarios específicos.
nodeaccess
Install
composer require 'drupal/nodeaccess:8.x-1.0'
composer require 'drupal/nodeaccess:8.x-1.1'
Overview
Nodeaccess permite a los administradores del sitio gestionar permisos para nodos de forma individual por rol y usuario. A diferencia de los permisos estándar de Drupal que se aplican globalmente, este módulo implementa un control de acceso detallado por nodo que funciona sin requerir categorización por taxonomía.
Con este módulo, puedes restringir el acceso a cualquier nodo individual y asignar permisos para ver, editar o eliminar cada nodo por usuario o rol. Una vez habilitado, aparece una pestaña 'Grants' en las páginas de nodos donde se pueden configurar los permisos para ese nodo específico.
El módulo se integra profundamente con el sistema de acceso a nodos de Drupal a través de hook_node_access_records() y hook_node_grants(), proporcionando tres ámbitos de acceso: nodeaccess_role (para acceso basado en roles), nodeaccess_user (para acceso específico de usuario) y nodeaccess_author (para acceso basado en autoría).
Features
- Control de acceso por nodo con permisos de ver, editar y eliminar para roles y usuarios individuales
- Permisos basados en autoría que pueden configurarse por tipo de contenido
- Visibilidad configurable de roles en la pestaña de grants con alias de nombres de visualización y ordenación por peso
- Permisos predeterminados por tipo de contenido que se aplican a nuevos nodos
- Permisos por tipo de contenido que permiten delegar la gestión de grants a roles de usuario específicos
- La disponibilidad de la pestaña Grants puede habilitarse/deshabilitarse por tipo de contenido
- Funcionalidad de búsqueda de usuarios en la pestaña de grants que soporta tanto autocompletado (con acceso a perfiles de usuario) como entrada de ID de usuario
- Soporte para contenido multilingüe con manejo adecuado del estado de publicación de traducciones
- Actualizaciones automáticas de configuración cuando se crean, actualizan o eliminan roles o tipos de contenido
Use Cases
Restringir páginas específicas a ciertos usuarios
Usa Nodeaccess cuando necesites restringir el acceso a nodos específicos a ciertos usuarios sin crear reglas de acceso complejas basadas en taxonomía. Habilita la pestaña Grants para el tipo de contenido, luego en la pestaña Grants de cada nodo restringido, elimina el acceso de visualización de los roles anónimo y autenticado, y otorga acceso de visualización solo a usuarios específicos o roles personalizados.
Control de acceso al contenido por editores
Permite que los editores de contenido controlen quién puede acceder a su contenido. Crea un rol 'Editor' con 'nodeaccess grant [type] permissions', habilita la pestaña Grants para ese tipo de contenido, y los editores podrán gestionar el acceso de su propio contenido a través de la pestaña Grants.
Contenido solo para autor antes de publicación
Configura tipos de contenido para que los autores siempre puedan editar su propio contenido pero otros no puedan ver borradores no publicados. Establece permisos de autor para grant_view, grant_update y grant_delete en la configuración del tipo de contenido, mientras mantienes los permisos de rol restringidos.
Tipos de contenido privados
Crea tipos de contenido privados donde solo el autor y los administradores tienen acceso por defecto. Deja todos los permisos de rol desmarcados en la configuración del tipo de contenido pero habilita los permisos de autor para ver/editar/eliminar. Los autores pueden entonces compartir acceso selectivamente usando la pestaña Grants.
Acceso al contenido basado en equipos
Crea roles para diferentes equipos (ej., 'Equipo de Marketing', 'Equipo de Desarrollo') y usa Nodeaccess para otorgar acceso al contenido a equipos completos. Habilita estos roles en la pestaña Grants y los editores pueden asignar acceso por equipo por nodo.
Tips
- Haz una copia de seguridad de tu base de datos antes de instalar Nodeaccess ya que cambia significativamente el comportamiento de acceso al contenido
- Para emular los permisos estándar de Drupal, otorga permiso de visualización a usuarios anónimos y autenticados para cada tipo de contenido
- Los grants de usuario son aditivos a los grants de rol - un usuario obtiene acceso si CUALQUIERA de sus roles o su grant de usuario individual lo permite
- Los permisos de Autor en la configuración del tipo de contenido no pueden ser anulados en nodos individuales - siempre se aplican al autor del nodo
- Usa la función 'Nombre de visualización' para proporcionar nombres de rol amigables en la pestaña de grants si los nombres de máquina de tus roles son técnicos
- Al otorgar permisos a usuarios individuales, recuerda marcar la casilla '¿Mantener?' o el usuario será eliminado al guardar
Technical Details
Admin Pages 2
/admin/config/people/nodeaccess
Configura los ajustes globales de nodeaccess incluyendo qué roles aparecen en las pestañas de grants de nodos, permisos predeterminados para cada tipo de contenido, y qué operaciones de grant están disponibles.
/node/{node}/grants
Configura permisos de acceso para un nodo específico. Permite establecer permisos de ver, editar y eliminar para roles seleccionados y usuarios individuales.
Permissions 3
Hooks 8
hook_node_access_records
Proporciona registros de acceso para nodos. Devuelve grants para roles, usuarios y autores basados en configuraciones específicas del nodo (de la tabla nodeaccess) o valores predeterminados del tipo de contenido (de nodeaccess.settings).
hook_node_grants
Proporciona IDs de grant para una cuenta de usuario. Mapea los roles del usuario a IDs de grant nodeaccess_role y proporciona ID de usuario para los ámbitos nodeaccess_user y nodeaccess_author.
hook_node_type_insert
Agrega automáticamente un nuevo tipo de contenido a la configuración de nodeaccess con permisos predeterminados (sin acceso) para todos los roles y autor.
hook_node_type_delete
Elimina el tipo de contenido borrado de la configuración de nodeaccess.
hook_node_delete
Elimina grants específicos del nodo de la tabla nodeaccess cuando se elimina un nodo.
hook_user_role_insert
Agrega un nuevo rol a la configuración de nodeaccess incluyendo map_rid_gid, roles_settings y bundles_roles_grants.
hook_user_role_update
Actualiza el nombre de visualización del rol en la configuración de nodeaccess cuando cambia la etiqueta de un rol.
hook_user_role_delete
Elimina el rol borrado de toda la configuración de nodeaccess.
Troubleshooting 5
Este es el comportamiento esperado. Después de habilitar Nodeaccess, debes configurar permisos en la página de configuración (/admin/config/people/nodeaccess). Como mínimo, otorga permiso de visualización a usuarios anónimos y/o autenticados para cada tipo de contenido para emular el comportamiento estándar de Drupal.
Verifica que 'Mostrar pestaña de grant para este tipo de contenido' esté habilitado en la configuración de Nodeaccess para ese tipo de contenido. También verifica que el usuario tenga el permiso 'administer nodeaccess' o el permiso específico 'nodeaccess grant [type] permissions' para ese tipo de contenido.
El sistema de acceso de Drupal es aditivo. Si un usuario tiene acceso a través de su rol, no puedes revocarlo para ese usuario individual. Por ejemplo, si los usuarios autenticados tienen permiso de edición, no puedes eliminar el acceso de edición para un usuario autenticado específico.
Después de cambiar configuraciones en la página de configuración de Nodeaccess, el acceso a nodos se marca automáticamente para reconstrucción. Si los cambios aún no se aplican, ejecuta manualmente la reconstrucción de acceso a nodos en /admin/reports/status/rebuild.
Los usuarios administradores evitan todas las restricciones de acceso a nodos por diseño. Este es el comportamiento del núcleo de Drupal y no puede ser anulado por Nodeaccess.
Security Notes 5
- Después de habilitar este módulo, ningún contenido es accesible hasta que se configuren los permisos - planifica tus reglas de acceso antes de habilitarlo en un sitio de producción
- Los usuarios administradores siempre evitan las restricciones de acceso a nodos y no pueden ser restringidos usando este módulo
- El permiso 'administer nodeaccess' debe restringirse a administradores de confianza ya que permite modificar todas las reglas de acceso
- Otorgar a un rol permisos de editar o eliminar en un tipo de contenido afecta a todos los nodos de ese tipo a menos que se anulen en nodos específicos
- Considera usar 'nodeaccess grant [type] permissions' específicos por tipo de contenido en lugar de 'grant node permissions' para una mejor delegación de control de acceso