Wie finde ich die Rollen-ID aus dem Rollennamen?

17

Beim Anmelden möchte ich eine Datenquelle eines Drittanbieters (Tabelle in der Datenbank) für einen Benutzer überprüfen und, falls gefunden, diesem Benutzer eine Rolle hinzufügen.

Ich möchte die Rolle nicht erraten, ich möchte sie aus dem Rollennamen erhalten.

chim
quelle

Antworten:

20

Dies ist mit user_roles () und array_search () recht einfach . Unten finden Sie eine Funktion, die die Rollen-ID zurückgibt, wenn eine Rolle mit dem Namen übereinstimmt und ansonsten FALSE.

function get_role_by_name($name) {
  $roles = user_roles();
  return array_search($name, $roles);
}

// Sample usage
$rid = get_role_by_name('administrator');

Ein Liner wäre:

$rid = array_search('administrator', user_roles());
Lauri
quelle
1
Die von user_roles () ausgeführte Abfrage ist als übersetzbar gekennzeichnet. Dies bedeutet, dass ein Modul die Rollennamen übersetzen kann. Drupal übersetzt die Rollennamen nur für die Standardrollen (dh anonymer Benutzer und authentifizierter Benutzer).
kiamlaluno
32

Es reicht aus, den Computernamen der Rolle zu kennen user_role_load_by_name().

if ($role = user_role_load_by_name('Role Name')) {
  // The role ID is in $role->rid.
}

Wenn die Rolle möglicherweise nicht existiert ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;
chim
quelle
3
Ich bevorzuge diesen Ansatz sehr, da mit dem anderen Ansatz die Rollennamen übersetzt werden könnten. In der Tat, die Abfrage von ausgeführt user_roles () ist getaggten übersetzbar . Drupal übersetzt nur die Namen für die Standardrollen, aber ein Modul könnte auch die anderen Rollennamen übersetzen.
kiamlaluno
4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
Pierre Buyle
-2

Die beste Methode zum Identifizieren der Rolle und ihrer ID ist SQL. Führen Sie diese Abfrage in Ihrem SQL-Editor aus.

select * from roles;

Und Sie erhalten die Liste der Rollen, einschließlich der ID und des Gewichts.

Bets Way
quelle
1
Der beste Weg ist die Verwendung der API von Drupal. Ein direkter Zugriff auf die Datenbank, wenn eine API vorhanden ist, ist weder eine gute Idee noch der beste Weg.
kiamlaluno
Dies ist ein sehr einfacher Weg, um die Rollen zu bekommen! Ich bin nicht überrascht, dass die Drupal Stack Exchange Police eine so einfache Lösung abgelehnt hat.
BlondeSwan