L'octroi d'un rôle Drupal à tous les utilisateurs qui ont un certain rôle

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

  •  13-09-2019
  •  | 
  •  

Question

Je dois appliquer automatiquement un rôle, le rôle X, à tous les utilisateurs de Drupal qui ont obtenu un rôle distinct, le rôle Y. En d'autres termes, je souhaite rôle X comme un sous-ensemble de rôle Y. Comment puis-je faire cela?

Était-ce utile?

La solution

Vous pouvez mettre en œuvre hook_user() dans un module personnalisé. Sur l'action « insert » et / ou « mise à jour », vous devriez vérifier pour rôle Y dans le tableau de $account->roles. Le cas échéant, ajouter le rôle X sinon déjà là. Cela garantirait que la règle soit appliquée chaque fois qu'un compte utilisateur est créé et / ou modifié.

Pour une bootstrapping / une opération de temps, jetez un oeil à user_multiple_role_edit() . Il vous permet d'ajouter ou de supprimer des rôles pour un tableau de codes d'utilisateur. Sinon, vous pouvez le faire directement dans la base de données:

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])
;

Autres conseils

Je suis d'accord avec Henrik Opel sur l'utilisation hook_user dans un module personnalisé serait une bonne solution pour maintenir les utilisateurs et assurez-vous qu'ils sont à ce jour, tout le temps.

Normalement, je ne me dérangerait pas d'écrire SQL ou quelque chose de même, mais dans ce cas, car il est sur un site de production, je préférerais une autre route, car si quelque chose peut facilement se tromper lors de l'écriture SQL brute, une petite faute de frappe peut causer de gros ennuis. Un autre bon point est que vous pouvez exécuter des problèmes comme drupal ne sera pas au courant de ce que SQL cru que vous exécutez sur votre base de données et peut sortir de la synchronisation avec certains processus, crochets et autres processus qui est fonctionne normalement lorsque vous faites des choses à travers l'API Drupal.

vous pouvez plutôt utiliser l'interface utilisateur admin Drupal. Je pense en fait que dans ce cas, il est le plus facile façon de faire ce que vous voulez. filtrer simplement tous les utilisateurs qui sont des étudiants. Cliquez sur tous les utilisateurs et leur donner le rôle de membre. Cela se fait en quelques clics en un rien de temps, et il est très sûr car Drupal va gérer tout le SQL pour vous.

Mise à jour Avec que de nombreux utilisateurs, je suis surpris que vous ne disposez pas d'une mise en page utilisateur personnalisée et la gestion de contenu en utilisant views_bulk_operations . En utilisant quelques minutes, vous pouvez configurer une page d'administration que vous pouvez utiliser pour préformer des opérations en bloc comme la modification du statut de l'utilisateur, les rôles, ou effectuer des tâches similaires pour les nœuds. Vous pouvez créer vos propres filtres en utilisant des filtres de vues exposés. Donc, en quelques clics, vous pouvez sélectionner tous les utilisateurs avec le rôle de l'étudiant et ce n'est pas membre, sélectionnez-les tous et ajouter le rouleau membre à eux. L'avantage le faire est non seulement qu'il est rapide et sûr, mais vous pouvez créer des pages pour gérer vos belles administrateurs du site, les créateurs de contenu, etc. Vous devriez envisager la recherche dans ce module.

Le module LDAP permet d'attribuer dynamiquement les rôles en fonction de DN. J'ai dû écrire mon propre module spécifiquement adapté à notre système, sinon je serais heureux de le partager.

scroll top