Organic Groups
Proporciona una API flexible para crear y gestionar grupos con miembros, roles, permisos y asociaciones de contenido de grupo.
og
Overview
El módulo Organic Groups (OG) brinda a los usuarios la capacidad de crear, gestionar y eliminar sus propios 'grupos' en un sitio. Cada grupo puede tener miembros y mantiene una página de inicio del grupo donde los miembros individuales pueden publicar contenido. Las publicaciones pueden enviarse a múltiples grupos (publicación cruzada), y el contenido individual del grupo puede compartirse con miembros o no miembros según sea necesario.
La membresía del grupo puede ser abierta, cerrada o moderada. El módulo aprovecha la Field API de Drupal para asociar tipos de contenido con grupos, lo que significa que cualquier tipo de Entity puede convertirse en grupo o contenido de grupo adjuntando los campos OG apropiados. Los usuarios pueden seleccionar con qué grupos asociar su contenido desde una lista de grupos que tienen autorización para ver.
OG proporciona un sistema completo de roles y permisos a nivel de grupo, permitiendo asignar diferentes permisos a diferentes roles dentro del contexto de cada grupo. Esto permite que los administradores de grupo tengan control granular sobre sus propios grupos mientras los administradores del sitio mantienen supervisión de todos los grupos.
Features
- Definir cualquier tipo/bundle de Entity como grupo a través de la UI de administración o programáticamente
- Asociar contenido con grupos usando campos de referencia de Entity con manejadores de selección OG
- Entity OgMembership con campos que conecta usuarios a grupos con estado (activo/pendiente/bloqueado), roles y metadatos
- Sistema de roles y permisos a nivel de grupo independiente de los roles del núcleo de Drupal
- Tres estados de membresía: activo (miembro pleno), pendiente (esperando aprobación) y bloqueado (acceso denegado)
- Soporte para múltiples tipos de membresía para diferentes niveles (ej., predeterminado, premium)
- Membresía automática del creador del grupo con acceso completo configurable para el administrador del grupo
- Funcionalidad de suscripción/cancelación con flujo de aprobación opcional para grupos privados
- Manejo de contenido de grupo huérfano cuando se eliminan grupos (métodos simple, por lotes o cron)
- Permisos estrictos de acceso a Node que respetan la membresía del grupo para operaciones CRUD
- Resolución de contexto de grupo desde rutas, argumentos de consulta y acceso de usuario
- Integración con Views con relaciones de grupo a contenido y de contenido a grupo
- Acciones masivas para gestión de membresías (aprobar, bloquear, desbloquear, eliminar, agregar/quitar roles)
- Arquitectura basada en eventos para extender permisos, roles y rutas de administración
- Contextos de caché para contexto de grupo, estado de membresía, permisos y roles
Use Cases
Grupos Comunitarios
Crea un sitio comunitario donde los usuarios pueden crear y gestionar sus propios grupos. Cada grupo tiene sus propios miembros, contenido y administradores. Los creadores de grupos se convierten automáticamente en administradores con control total sobre la membresía y permisos de su grupo.
Gestión de Proyectos
Configura grupos basados en proyectos donde los miembros del equipo colaboran en tareas y documentos. Diferentes tipos de membresía (desarrollador, gerente, visualizador) proporcionan distintos niveles de acceso. Usa el estado de membresía pendiente para nuevos miembros del equipo que requieren aprobación del gerente.
Cursos Educativos
Crea grupos de cursos donde los instructores gestionan a los estudiantes. El contenido del curso solo es visible para los estudiantes inscritos. Los instructores tienen acceso administrativo completo mientras que los estudiantes pueden ver y enviar tareas dentro de sus grupos de curso.
Espacios de Trabajo Privados
Implementa espacios de trabajo privados donde la suscripción requiere aprobación. Habilita la configuración 'deny_subscribe_without_approval' y otorga solo el permiso 'subscribe' a los no miembros. Los administradores aprueban las solicitudes de membresía para mantener la privacidad del grupo.
Plataforma Multi-inquilino
Construye una plataforma multi-inquilino donde cada inquilino es un grupo con contenido y usuarios aislados. Usa control de acceso estricto a Node para asegurar que los editores de contenido solo modifiquen contenido dentro de sus grupos de inquilino.
Niveles de Membresía
Implementa membresías escalonadas usando múltiples tipos de membresía. Crea tipos de membresía 'default' y 'premium' con diferentes campos y lógica de expiración. Los miembros premium reciben roles y permisos adicionales dentro de los grupos.
Tips
- Usa el método Og::createField() para añadir programáticamente campos de OG a los bundles de Entity durante la instalación del módulo.
- Suscríbete al evento og.permission para añadir permisos personalizados a nivel de grupo para las características de tu módulo.
- Usa cache contexts (og_group_context, og_membership_state, og_permissions, og_role) al renderizar contenido dependiente del grupo.
- La Entity OgMembership es fieldable - añade campos personalizados a los tipos de membresía para almacenar datos específicos del miembro como razón de unión o fecha de expiración.
- Usa relaciones de Views (og_group_to_group_content) en lugar de consultar directamente los campos de audiencia para listar contenido del grupo.
- Para grupos privados, combina la configuración 'deny_subscribe_without_approval' con una configuración cuidadosa de permisos para asegurar que las solicitudes de membresía requieran aprobación.
- Los administradores de grupo reciben permisos completos cuando 'group_manager_full_access' está habilitado - considera desactivar esto para sitios donde la transferencia de propiedad es común.
- Usa el método de eliminación de huérfanos por lotes o cron para sitios con grandes cantidades de contenido de grupo para prevenir problemas de tiempo de espera.
- El elemento og_autocomplete proporciona referencias de Entity conscientes del contexto del grupo - úsalo al construir formularios personalizados que referencian contenido del grupo.
Technical Details
Admin Pages 11
/admin/config/group
Página principal de administración del módulo Organic Groups que proporciona acceso a la configuración de ajustes, roles y permisos.
/admin/config/group/settings
Configura los ajustes globales del comportamiento de Organic Groups, incluyendo la gestión de membresías, el control de acceso y la gestión de contenido huérfano.
/admin/config/group/roles
Página de resumen que lista todos los tipos de grupo con enlaces para gestionar los roles de cada bundle de grupo.
/admin/config/group/roles/{entity_type_id}/{bundle_id}
Gestiona los roles de OG para un tipo de grupo específico. Los roles pueden reordenarse arrastrando y tienen operaciones para editar, eliminar y permisos.
/admin/config/group/roles/{entity_type_id}/{bundle_id}/add
Crea un nuevo rol de OG para el tipo de grupo especificado.
/admin/config/group/permissions
Página de resumen que lista todos los tipos de grupo con enlaces para gestionar los permisos de cada bundle de grupo.
/admin/config/group/permissions/{entity_type_id}/{bundle_id}
Configura los permisos para cada rol dentro de un tipo de grupo. Los permisos están organizados por proveedor (Grupo, Contenido de grupo) y se muestran en formato de matriz.
/admin/structure/membership-types
Gestiona los bundles de tipos de membresía de OG. Los tipos de membresía permiten diferentes configuraciones de membresía (por ejemplo, predeterminada, premium) con campos personalizados.
/admin/structure/membership-types/add
Crea un nuevo bundle de tipo de membresía para las membresías de OG.
/group/{entity_type_id}/{group}/admin/members
Visualiza y gestiona los miembros del grupo a través de una interfaz basada en Views con operaciones masivas para la gestión de membresías.
/group/{entity_type_id}/{group}/admin/members/add/{og_membership_type}
Añade un nuevo miembro al grupo seleccionando un usuario y asignando roles.
Permissions 1
Hooks 1
hook_og_user_access_alter
Permite a los módulos alterar los permisos a nivel de grupo para un usuario. Puede usarse para otorgar o revocar permisos dinámicamente basándose en lógica personalizada.
Troubleshooting 6
Asegúrate de que el módulo OG UI esté habilitado, que el permiso 'Subscribe user to group' esté otorgado a los roles apropiados en admin/config/group/permissions, y que el formateador 'Group subscription' esté seleccionado para el campo Group type en la configuración de Manage Display del tipo de contenido.
Verifica que el tipo de contenido esté configurado como 'Group content' en su pestaña Organic groups. Comprueba que el campo og_group_ref existe y que el usuario tiene permiso para publicar en los grupos de destino.
Este es el comportamiento esperado cuando 'Strict node access permissions' está habilitado. Desactiva esta configuración en admin/config/group/settings, añade al usuario al grupo, u otórgale el permiso 'administer organic groups'.
Habilita 'Delete orphans' en la configuración de OG en admin/config/group/settings. Elige el método de eliminación apropiado (simple para inmediato, cron para procesamiento en segundo plano). Para el método cron, asegúrate de que cron se ejecute regularmente.
Limpia la caché después de hacer cambios. Verifica que el usuario tenga una membresía activa (no pendiente o bloqueada) en el grupo. Comprueba que los permisos correctos estén asignados al rol del usuario en admin/config/group/permissions.
Verifica que los plugins de resolución de grupo estén correctamente ordenados en la configuración de OG. El orden predeterminado es: route_group, route_group_content, request_query_argument, user_access. Limpia la caché después de los cambios de configuración.
Security Notes 6
- El permiso 'administer organic groups' otorga acceso completo a todos los grupos - restringe esto solo a administradores de confianza.
- Los permisos a nivel de grupo con el flag 'restrict access' (como 'administer group') solo deben otorgarse a roles de confianza.
- Cuando 'Strict node access permissions' está desactivado, los usuarios con permisos globales de edición pueden modificar el contenido del grupo independientemente de la membresía.
- El permiso 'subscribe without approval' permite a los usuarios unirse a grupos inmediatamente - solo otorga esto para grupos públicos.
- Los propietarios de grupo siempre retienen ciertos permisos - asegúrate de que la transferencia de propiedad se maneje apropiadamente al cambiar la propiedad del grupo.
- Las implementaciones personalizadas de hook_og_user_access_alter() deben añadir correctamente las dependencias de caché para evitar resultados de acceso obsoletos.