Die Gewährung einer Drupal Rolle für alle Benutzer, die eine bestimmte Rolle haben

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

  •  13-09-2019
  •  | 
  •  

Frage

Ich muss automatisch eine Rolle, Rolle X gelten, für alle Drupal-Benutzer, die eine separate Rolle, Rolle Y. Mit anderen Worten erteilt wurden, möchte ich für Rollen X eine Teilmenge der Rolle Y. sein Wie kann ich tun das?

War es hilfreich?

Lösung

Sie könnten implementieren hook_user() in einem benutzerdefinierten Modul. Auf dem ‚Einfügen‘ und / oder ‚update‘ Aktion, dann würden Sie für Rolle Y überprüfen im $account->roles Array. Falls vorhanden, fügt Rolle X bereits, wenn nicht da. Dies würde sicherstellen, dass Ihre Regel Konto jedes Mal, wenn ein Benutzer angelegt wird, wird auch erstellt und / oder geändert werden.

Für eine Bootstrapping / ein Zeitbetrieb, werfen Sie einen Blick auf user_multiple_role_edit() . Damit können Sie Rollen für eine Reihe von Benutzer-IDs hinzufügen oder entfernen. Alternativ könnten Sie es tun, direkt in der Datenbank:

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

Andere Tipps

ich mit Henrik Opel zustimmen hook_user in einem benutzerdefinierten Modul zur Verwendung von eine gute Lösung wäre, die Benutzer zu erhalten und sicherzustellen, dass sie die ganze Zeit bis heute.

Normalerweise würde ich nichts dagegen gleich SQL oder etwas zu schreiben, aber in diesem Fall, da es auf einem Produktionsstandort ist, würde ich einen anderen Weg bevorzugen, da, wenn etwas leicht schief gehen kann, wenn roh SQL schreiben, ein wenig Tippfehler kann verursacht große Probleme. Ein weiterer guter Punkt ist, dass Sie Probleme als Drupal wird nicht bewusst sein, was rohe SQL Sie auf Ihrer Datenbank ausführen und möglicherweise nicht synchron mit einigen Prozessen, Haken und anderen Prozessen heraus, das normalerweise ausgeführt, wenn Sie die Dinge durch die Drupal API tun.

Sie können stattdessen das Drupal-Benutzer Admin-Interface verwenden. Ich glaube tatsächlich, dass in diesem Fall ist es der am einfachsten Weg zu tun, was Sie wollen. Filter einfach alle Benutzer, die Studenten sind. Klicken Sie auf alle Benutzer und geben ihnen die Mitgliedsrolle. Dies ist mit ein paar Klicks in kürzester Zeit durchgeführt und ist sehr sicher, da Drupal alle SQL für Sie behandelt.

Aktualisiert
Mit, dass viele Benutzer, ich bin überrascht, dass Sie keine benutzerdefinierten Benutzer und Content-Verwaltung Seite einrichten müssen mit views_bulk_operations . Mit ein paar Minuten, Sie können Setup eine Admin-Seite, die Sie Bulk-Operationen Preform wie Ändern Benutzerstatus verwenden können, Rollen oder für Knoten ähnliche Aufgaben ausführen. Sie können Ihre eigenen Filter mit freiliegenden Ansichten Filter erstellen. So mit wenigen Klicks Sie alle Benutzer mit Rolle des Schülers wählen können, und das ist nicht Mitglied, wählen sie alle und das Element Rolle, um sie hinzuzufügen. Der Vorteil dabei ist, nicht nur, dass es schnell und sicher, aber Sie können einige schöne Verwaltung Seiten für Ihre Website-Administratoren, Content-Ersteller, etc. erstellen sollten Sie in dieses Modul betrachten suchen.

Das LDAP-Modul ermöglicht es Ihnen, dynamisch Rollen auf DN Basis zuzuweisen. Ich hatte eigentlich mein eigenes Modul zu schreiben, die speziell auf unser System abgestimmt ist, sonst würde ich mehr als glücklich, es zu teilen.

Link-Text

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top