Otorgar un rol de Drupal a todos los usuarios que tienen un rol determinado

StackOverflow https://stackoverflow.com/questions/1669785

  •  13-09-2019
  •  | 
  •  

Pregunta

Necesito aplicar automáticamente un rol, Rol X, a todos los usuarios de Drupal a los que se les ha otorgado un rol separado, Rol Y.En otras palabras, deseo que el Rol X sea un subconjunto del Rol Y.¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Se podría aplicar hook_user() en un módulo personalizado. En la 'inserción' y / o la acción 'actualización', que haría el papel de Y en la matriz $account->roles. Si está presente, agregue papel X si no está ya allí. Esto aseguraría que la regla se aplica cada vez que una cuenta de usuario se crea y / o cambiado.

Para una sola operación arranque / tiempo, echar un vistazo a user_multiple_role_edit() . Se le permite agregar o quitar las funciones de una tabla de id de usuario. Como alternativa, puede hacerlo directamente en la base de datos:

INSERT INTO users_roles (uid, rid)
  SELECT uid, [roleX_ID] AS rid FROM users_roles
    WHERE uid IN
      (SELECT uid FROM users_roles WHERE rid = [roleY_ID])
    AND uid NOT IN
      (SELECT uid FROM users_roles WHERE rid = [roleX_ID])
;

Otros consejos

Estoy de acuerdo con Henrik Opel en el uso de hook_user en un módulo personalizado sería una buena solución para mantener los usuarios y asegurarse de que estén al día todo el tiempo.

Normalmente no me importaría escribir SQL o algo parecido, pero en este caso, ya que está en un lugar de producción, preferiría una ruta diferente, ya que si algo puede salir mal cuando se escribe SQL crudo, un pequeño error tipográfico puedo causar grandes problemas. Otro punto positivo es que se puede a tener problemas como Drupal no será consciente de lo que SQL prima se ejecuta en su base de datos y podría perder la sincronización con algunos procesos, ganchos y otros procesos que normalmente se ejecutan cuando se hacen las cosas a través de la API de Drupal.

En su lugar puede utilizar la interfaz de usuario de administración de Drupal. De hecho, creo que en este caso, es la más fácil manera para hacer lo que quiera. Simplemente filtrar todos los usuarios que son estudiantes. Haga clic en todos los usuarios y darles la función miembro. Esto se hace con unos pocos clics en ningún momento, y es muy seguro ya que Drupal se encargará de todo el SQL para usted.

Actualización
Con tantos usuarios, me sorprende que usted no tiene una configuración de página de usuario personalizada y gestión de contenido utilizando views_bulk_operations . El uso de unos minutos, se puede configurar un administrador de la página que se puede utilizar para preformas operaciones masivas como cambiar el estado del usuario, papeles, o realizar tareas similares para los nodos. Usted puede crear sus propios filtros utilizando filtros vistas expuestas. Así que con unos pocos clics se puede seleccionar todos los usuarios con el rol de estudiante y que no es miembro, seleccionarlos todos y añadir el rollo miembro para ellos. La ventaja haciendo esto no sólo que es rápido y seguro es, pero se pueden crear algunas páginas que gestionan agradables para los administradores del sitio, los creadores de contenidos, etc Usted debe considerar el mirar en este módulo.

El módulo LDAP le permite asignar roles dinámicamente según el DN.De hecho, tuve que escribir mi propio módulo diseñado específicamente para nuestro sistema; de lo contrario, estaría más que feliz de compartirlo.

Texto del enlace

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top