Role Delegation

Permite a los administradores del sitio otorgar a roles específicos la autoridad para asignar roles seleccionados a usuarios sin requerir el permiso 'administer permissions'.

role_delegation
50,628 sites
81
drupal.org

Install

Drupal 11, 10 v8.x-1.4
composer require 'drupal/role_delegation:8.x-1.4'
Drupal 9 v8.x-1.2
composer require 'drupal/role_delegation:8.x-1.2'
Drupal 8 v8.x-1.1
composer require 'drupal/role_delegation:8.x-1.1'

Overview

El módulo Role Delegation permite un control detallado sobre las capacidades de asignación de roles. En lugar de otorgar a los usuarios el poderoso permiso 'administer permissions', los administradores del sitio pueden delegar la capacidad de asignar roles específicos a roles de usuario designados.

Para cada rol definido en el sistema, Role Delegation genera automáticamente un permiso correspondiente 'assign [role] role'. Cuando un usuario tiene uno o más de estos permisos (o el permiso 'assign all roles'), obtiene acceso a la funcionalidad de asignación de roles a través de múltiples interfaces: una pestaña dedicada 'Roles' en los perfiles de usuario, casillas de verificación de roles en el formulario de edición de usuario y operaciones masivas de agregar/eliminar roles en la página de administración de usuarios.

Este módulo es particularmente útil para organizaciones donde diferentes administradores necesitan gestionar diferentes tipos de usuarios. Por ejemplo, un gerente de departamento podría recibir permiso para asignar roles de 'editor' y 'contributor' sin tener acceso para asignar roles administrativos.

Features

  • Genera dinámicamente el permiso 'assign [role] role' para cada rol en el sistema
  • Proporciona una pestaña dedicada 'Roles' en los perfiles de usuario (/user/{uid}/roles) para la gestión de roles
  • Agrega un enlace de operación de entidad 'Roles' en la página de administración de usuarios
  • Se integra con el formulario de edición de usuario agregando un campo role_change cuando los usuarios tienen permisos de delegación
  • Se integra con Views Bulk Operations para filtrar acciones de agregar/eliminar roles basándose en los permisos de delegación del usuario
  • Sobrescribe las acciones AddRoleUser y RemoveRoleUser del core para funcionar sin el permiso 'administer users'
  • Revoca automáticamente los permisos 'assign [role] role' de todos los roles cuando se elimina un rol
  • Soporta el módulo single_user_role manejando tanto entradas de casillas de verificación como botones de radio

Use Cases

Gestión de roles basada en departamentos

Una organización grande tiene múltiples departamentos, cada uno con su propio rol de 'editor de departamento'. Los gerentes de departamento necesitan asignar roles de editor a los miembros de su equipo pero no deberían tener acceso a roles administrativos. Otorgar a cada gerente el permiso 'assign [departamento]_editor role', permitiéndoles gestionar el acceso de su equipo sin comprometer la seguridad del sitio.

Delegación de moderación de contenido

Un flujo de trabajo editorial requiere que los editores senior promuevan usuarios a roles de 'reviewer' o 'publisher'. En lugar de dar a los editores senior derechos completos de administración de permisos, otorgarles los permisos 'assign reviewer role' y 'assign publisher role'. Pueden gestionar la jerarquía del equipo de contenido mientras están restringidos de acceder a roles técnicos o administrativos.

Incorporación de usuarios por Recursos Humanos

El personal de RR.HH. necesita configurar cuentas de nuevos empleados con roles apropiados basándose en su departamento y función laboral. Otorgar a los usuarios de RR.HH. 'assign all roles' o permisos de roles de departamento específicos. Pueden completar la configuración de usuarios a través de la pestaña Roles sin necesitar acceso a otras áreas administrativas.

Solicitudes de roles de autoservicio

Combinado con un módulo de flujo de trabajo de solicitud/aprobación, los usuarios podrían solicitar ciertos roles que un gerente luego aprueba. El gerente solo necesita el permiso de delegación para esos roles específicos para completar la aprobación visitando la pestaña Roles del usuario.

Elevación temporal de acceso

El personal de soporte ocasionalmente necesita permisos elevados para asistir a usuarios. Un líder de equipo con el permiso 'assign support_admin role' puede otorgar temporalmente y luego revocar este rol de los miembros del equipo según sea necesario, sin involucrar a los administradores completos del sitio.

Tips

  • Otorgar 'assign all roles' con moderación - proporciona el mismo poder de asignación de roles que 'administer permissions' sin la capacidad de cambiar configuraciones de permisos
  • La pestaña Roles aparece en perfiles de usuario solo para usuarios que tienen permisos de delegación y no tienen el permiso 'administer users'
  • La delegación de roles funciona con Views Bulk Operations, haciendo eficiente asignar roles a múltiples usuarios a la vez desde /admin/people
  • Cuando se elimina un rol, todos los permisos 'assign [role] role' son automáticamente revocados de otros roles
  • El módulo agrega un enlace de operación 'Roles' al menú desplegable de la página de administración de usuarios para acceso rápido a la gestión de roles

Technical Details

Admin Pages 1
Roles /user/{user}/roles

Un formulario dedicado para gestionar las asignaciones de roles para un usuario específico. Esta página muestra casillas de verificación para cada rol que el usuario actual tiene permiso para asignar. Los usuarios pueden marcar o desmarcar roles y guardar para actualizar las asignaciones de roles del usuario objetivo. Esta página solo es accesible para usuarios que tienen al menos un permiso 'assign [role] role' o el permiso 'assign all roles', y que no tienen el permiso 'administer users' (ya que esos usuarios deberían usar el formulario estándar de edición de usuario).

Permissions 2
Asignar todos los roles

Otorga la capacidad de asignar cualquier rol a cualquier usuario. Este es un permiso restringido que proporciona autoridad integral de delegación de roles.

Asignar rol [role]

Permiso generado dinámicamente para cada rol en el sistema (excepto anonymous y authenticated). Otorga la capacidad de asignar el rol específico a usuarios. El nombre del permiso usa el machine name del rol (ej., 'assign editor role' para un rol con ID 'editor').

Hooks 12
hook_help

Proporciona texto de ayuda para el módulo en la página de ayuda.

hook_user_role_delete

Limpia los permisos 'assign [role] role' cuando se elimina un rol. Encuentra todos los roles que tienen el permiso para asignar el rol eliminado y revoca ese permiso.

hook_user_presave

Procesa los cambios de rol enviados a través del campo role_change. Agrega roles que fueron marcados y elimina roles que fueron desmarcados, pero solo para roles que el usuario actual tiene permiso para asignar.

hook_user_load

Establece el marcador de valor de campo vacío en el campo computado role_change cuando se cargan usuarios. Esto permite distinguir entre eliminaciones intencionales de roles y datos de campo faltantes.

hook_form_user_form_alter

Modifica el formulario de usuario para colocar el campo role_change en el grupo account y agrega un entity builder para manejar casos donde el campo no es accesible.

hook_field_widget_single_element_form_alter

Establece el valor por defecto para el widget role_change basándose en los roles actuales del usuario, ya que los campos computados no almacenan valores.

hook_options_list_alter

Filtra las opciones para el campo de referencia de entidad role_change para mostrar solo roles que el usuario actual puede asignar.

hook_entity_base_field_info

Agrega el campo base computado 'role_change' a las entidades de usuario. Este campo usa referencia de entidad a user_role con widget options_buttons.

hook_entity_field_access

Controla el acceso de edición al campo role_change. Deniega acceso si el usuario tiene 'administer permissions' (debería usar el campo normal de roles). Permite acceso si el usuario tiene algún permiso de delegación de roles.

hook_entity_operation

Agrega un enlace de operación 'Roles' a las entidades de usuario en la página admin/people, enlazando a /user/{uid}/roles.

hook_views_data_alter

Sobrescribe el plugin de campo Views user_bulk_form con role_delegation_user_bulk_form para filtrar operaciones masivas basándose en permisos de delegación.

hook_action_info_alter

Reemplaza las clases de acción AddRoleUser y RemoveRoleUser del core con versiones de role delegation que funcionan sin el permiso 'administer users'.

Troubleshooting 5
Los usuarios con el permiso 'administer users' no ven la pestaña Roles

Este es el comportamiento esperado. Los usuarios con el permiso 'administer users' deberían usar el formulario estándar de edición de usuario que incluye el campo completo de roles. La pestaña Roles está diseñada para usuarios que pueden delegar roles pero no pueden administrar usuarios completamente.

Los usuarios con 'administer permissions' no ven el campo role_change

Este es el comportamiento esperado. Los usuarios con 'administer permissions' tienen acceso al campo estándar de roles en el formulario de edición de usuario. El campo role_change está oculto para estos usuarios para evitar interfaces duplicadas de selección de roles.

Las operaciones masivas no muestran acciones de agregar/eliminar roles

Asegurar que el usuario tenga al menos un permiso 'assign [role] role' o el permiso 'assign all roles'. El campo de formulario masivo filtra acciones basándose en estos permisos.

La asignación de roles no funciona al enviar

Verificar que el usuario tiene el permiso específico para el rol que se está asignando. El módulo solo procesa cambios de roles para roles que el usuario actual tiene permiso para delegar, ignorando silenciosamente cambios no autorizados.

Los permisos para roles eliminados aún aparecen en el código

El módulo revoca automáticamente los permisos 'assign [role] role' cuando se elimina un rol a través de hook_user_role_delete. Si los permisos persisten, limpiar la caché con drush cr.

Security Notes 5
  • El permiso 'assign all roles' está marcado como 'restrict access: TRUE' porque permite asignar cualquier rol incluyendo los administrativos
  • Los usuarios no pueden asignar roles para los que no tienen permiso explícito de delegar - el módulo valida todos los cambios de roles contra los permisos del usuario actual
  • El módulo previene que usuarios con 'administer permissions' usen el campo role_change para evitar eludir la interfaz estándar de permisos
  • Los permisos de delegación de roles no otorgan la capacidad de crear, eliminar o modificar definiciones de roles - solo asignar roles existentes a usuarios
  • Cuando se eliminan roles, los permisos de delegación asociados son automáticamente limpiados para prevenir referencias de permisos huérfanas