役割名から役割IDを見つけるにはどうすればよいですか?


17

ログイン時に、ユーザーのサードパーティデータソース(dbのテーブル)を確認し、見つかった場合はそのユーザーにロールを追加します。

役割を取り除くことを推測したくありません。役割名から取得したいです。

回答:


20

これはuser_roles()およびarray_search()を使用すると非常に簡単です。以下は、名前に一致するロールがある場合にロールIDを返し、そうでない場合にFALSEを返す関数です。

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

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

1つのライナーは次のようになります。

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

1
user_roles()によって実行されるクエリにはtranslatableというタグが付けられます。これは、モジュールがロール名を変換できることを意味します。Drupalは、デフォルトのロール(匿名ユーザー、認証済みユーザー)のロール名のみを変換します。
kiamlaluno

32

ロールのマシン名がわかっているので、を使用するだけで十分user_role_load_by_name()です。

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

ロールが存在しない可能性がある場合...

$role = user_role_load_by_name('Role Name');

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

3
私はこのアプローチを非常に好みます。他のアプローチと同様に、ロール名を翻訳できるからです。実際、user_roles()によって実行されるクエリには、translatableというタグが付けられています。Drupalはデフォルトロールの名前のみを変換しますが、モジュールは他のロール名も変換できます。
kiamlaluno

4
$ rid =($ role = user_role_load_by_name())?$ role-> rid:NULL;
ピエールバイル

-2

ロールとそのIDを識別する最良の方法は、SQLからです。SQLエディターでこのクエリを実行します。

select * from roles;

そして、IDと重みを含むロールのリストを取得します。


1
最良の方法は、Drupalが提供するAPIを使用することです。APIがある場合、データベースに直接アクセスするのは、良いアイデアでも、最善の方法でもありません。
キアマルノ

これは、役割を取得する非常に簡単な方法です!Drupal Stack Exchange Policeがこのようなシンプルなソリューションを拒否したことは驚くことではありません。
BlondeSwan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.