ユーザーに役割があるかどうかを確認します


46

ユーザーに特定の役割があるかどうかを確認するにはどうすればよいですか?

これを見つけましたが、Drupal 6用です。

回答:


87

すでにその投稿を見つけているので、コメントも必ず読んでください。役割の確認よりも許可の確認が推奨される理由を明確に説明しています。パーミッションを使用する場合、そのパーミッションを複数のロールに割り当てることができ、システムをより柔軟にします。また、ロールの名前を変更すると、コードが破損する可能性があることを忘れないでください。

ただし、役割を確認する場合は、次の操作を実行できます。

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role.
if (in_array('editor', $user->roles)) {
  // do fancy stuff
}

1
複数の役割を確認したい場合はどうすればいいですか。たとえば、「エディター」または「パブリッシャー」の場合、派手なものよりも。コーディング方法。アドバイスお願いします。本当に理解できません。
アダムタン

8
答えを読んでください:役割(または複数)を確認することはお勧めしません。代わりに権限を確認してください。残りの質問(ifステートメントで2つの条件を組み合わせる)は基本的なPHPであり、Drupalに関連するものではありません。論理演算子に関するPHPドキュメントを読んでください。
marcvangend

11

現在のユーザーが単一のロールを持っているのか、複数のロールを持っているのかを確認するには、次の方法が最適です。

//can be used in access callback too
function user_has_role($roles) {
    //checks if user has role/roles
    return !!count(array_intersect(is_array($roles)? $roles : array($roles), array_values($GLOBALS['user']->roles)));
};

if (user_has_role(array('moderator', 'administrator'))) {
  // $user is admin or moderator
} else if(user_has_role('tester')){
  // $user is tester
} else{
  // $user is not admin and not moderator
}

9

Drupalバージョン> = 7.36の更新

Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7の関数user_has_roleを使用できます

この例を試してください:

<?php
function MYMODULE_foo() {
  $role = user_role_load_by_name('Author');
  if (user_has_role($role->rid)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }

  $user = user_load(123);

  if(user_has_role($role->rid, $user)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }
}
?>

2

develモジュールをインストールして、dpm($ user)を実行できます。これにより、ユーザーロールを含むすべてのユーザー情報を含む配列が出力されます。

この配列から、「ロール」の配列位置を見つけ、モジュールでそれを使用してユーザーロールを見つけることができます。


Development-> Execute PHP codeで、次を入力します。global $ user; dpm($ user);
ダイヤモンド

1

ロール名が変更された場合に備えて、将来のために、データベースのロールテーブルにあるロールID(rid)を確認するのが最善です。

rid 16でロールを確認する場合は、次の操作を行います。

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role, when 'editor' has role id 16
if (array_key_exists(16, $user->roles)) {
  // do fancy stuff
}

1
実際には、あなたが役割、マシン名のようなものは、おそらく保持される移行、およびIDがないとき
Mołot

ロールテーブルには、マシン名とユーザー名だけがありません。users_rolesテーブルは、uidをridに割り当てます。
ハンスロッセル14

1

ベストプラクティスとして受け入れられた回答で言及されているコメントの実際のコードは次のとおりです

<?php
  function mymodule_perm() {
    return array('access something special');
  }

  function dosomethingspecial() {
    // For current user
    if (user_access('access something special')) {
      // Doing something special!
    }

    // For a specific user
    if (user_access('access something special', $theuser)) {
      // Doing something special!
    }
  }
?>

0

print_r($ user)によってユーザーの役割を確認できます。出力では、次のようなものが得られます。

stdClassオブジェクト
(
    [uid] => 0
    [ホスト名] => :: 1
    [ロール] =>配列
        (
            [1] =>匿名ユーザー//現在のユーザーロールは匿名です。
        )

0

ユーザーが特定の役割を持っているかどうかを確認するには:

function test_role(){
   global $user;
   if(isset($user->roles['my_role'])){
     return true;
   }
   else {
    return false;
 }
}

0
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}

0

上記の答えはうまくいきませんでした、確かな方法ではありません、私はこの投稿とコードが `

// $ userが管理者ロールを持っているかどうかを確認します。if(in_array( 'administrator'、array_values($ user-> roles))){//何かをします。}?> `

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.