Jak znaleźć identyfikator roli na podstawie nazwy roli?

17

Podczas logowania chcę sprawdzić źródło danych innej firmy (tabela w db) dla użytkownika, a jeśli zostanie znalezione, chcę dodać rolę do tego użytkownika.

Nie chcę odgadnąć roli, chcę ją uzyskać z nazwy roli.

chim
źródło

Odpowiedzi:

20

Jest to dość proste w przypadku user_roles () i array_search () . Poniżej znajduje się funkcja, która zwróci identyfikator roli, jeśli istnieje rola pasująca do nazwy, w przeciwnym razie FALSE.

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

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

Jedna wkładka to:

$rid = array_search('administrator', user_roles());
Lauri
źródło
1
Kwerenda wykonana przez user_roles () jest oznaczona jako możliwa do przetłumaczenia , co oznacza, że ​​moduł może tłumaczyć nazwy ról. Drupal tłumaczy nazwy ról tylko dla ról domyślnych (tj. Użytkownika anonimowego i użytkownika uwierzytelnionego).
kiamlaluno
32

Znając nazwę maszyny roli, wystarczy użyć user_role_load_by_name().

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

Jeśli rola może nie istnieć ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;
chim
źródło
3
Zdecydowanie wolę to podejście, ponieważ w drugim podejściu nazwy ról mogłyby zostać przetłumaczone. W rzeczywistości zapytanie wykonane przez user_roles () jest oznaczone jako podlegające tłumaczeniu . Drupal tłumaczy tylko nazwy domyślnych ról, ale moduł może również tłumaczyć inne nazwy ról.
kiamlaluno
4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
Pierre Buyle
-2

Najlepszym sposobem na identyfikację roli i jej identyfikatora jest SQL. Uruchom to zapytanie w edytorze SQL.

select * from roles;

Otrzymasz listę ról, w tym identyfikator i wagę.

Bets Way
źródło
1
Najlepszym sposobem jest użycie interfejsu API dostarczonego przez Drupal. Bezpośredni dostęp do bazy danych, gdy istnieje interfejs API, nigdy nie jest dobrym pomysłem ani najlepszym sposobem.
kiamlaluno
To bardzo łatwy sposób na uzyskanie ról! Nie dziwię się, że policja wymiany stosów Drupal głosowała za tak prostym rozwiązaniem.
BlondeSwan,