Rol kimliğini rol adından nasıl bulurum?


17

Oturum açıldığında bir kullanıcı için üçüncü taraf veri kaynağını (db'deki tablo) kontrol etmek istiyorum ve bulunursa bu kullanıcıya bir rol eklemek istiyorum.

Rolün ortadan kaldırılmasını tahmin etmek istemiyorum, rol adından almak istiyorum.

Yanıtlar:


20

Bu user_roles () ve array_search () ile oldukça basittir . Aşağıda, ad ve aksi halde FALSE ile eşleşen bir rol varsa rol kimliğini döndürecek bir işlev vardır.

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

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

Bir astar:

$rid = array_search('administrator', user_roles());

1
Tarafından yürütülen sorgu user_roles () etiketli bilgiler çevrilebilir bir modül rol isimleri tercüme anlamına gelir. Drupal, rol adlarını yalnızca varsayılan roller (yani anonim kullanıcı ve kimliği doğrulanmış kullanıcı) için çevirir.
kiamlaluno

32

Rolün makine adını bilmek, kullanmak yeterlidir user_role_load_by_name().

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

Rol mevcut değilse ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;

3
Bu yaklaşımı çok tercih ederim, diğer yaklaşımda rol isimleri tercüme edilebilir. Aslında, tarafından yürütülen sorgu user_roles () isim levhası olup çevrilebilir . Drupal yalnızca varsayılan rollerin adlarını çevirir, ancak bir modül diğer rol adlarını da çevirebilir.
kiamlaluno

4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid: NULL;
Pierre Buyle

-2

Rolü ve kimliğini tanımlamanın en iyi yolu SQL'dir. Bu sorguyu SQL düzenleyicinizde çalıştırın.

select * from roles;

Ve id ve ağırlık da dahil olmak üzere Roller listesini alacaksınız.


1
En iyi yol Drupal tarafından sağlanan API'yı kullanmaktır. Bir API olduğunda doğrudan veritabanına erişmek asla iyi bir fikir veya en iyi yol değildir.
kiamlaluno

Bu rolleri almanın çok kolay bir yoludur! Drupal Stack Exchange Polisinin bu kadar basit bir çözümü oylamasına şaşırmadım.
BlondeSwan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.