web-dev-qa-db-ja.com

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

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

私は this を見つけましたが、Drupal 6。

45
giorgio79

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

とはいえ、役割を確認したい場合は、次のようにできます。

// 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
}
88
marcvangend

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

//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
}
11

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...
  }
}
?>
9
Marcin

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

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

ロール名が変更された場合の将来性を確保するには、データベースのロールテーブルにあるロール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
Hans Rossel

コメント の実際のコードは、承認された回答でベストプラクティスとして言及されています

<?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!
    }
  }
?>
1
Eric Johnson

ユーザーの役割をprint_r($ user)で確認すると、出力では次のようになります。

 stdClassオブジェクト
(
 [uid] => 0 
 [hostname] => :: 1 
 [roles] => Array 
(
 [1] =>匿名ユーザー//現在のユーザーロールマイニングは匿名である場合があります。
0
akash bhawra
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
0
adal

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

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

上記の答えはうまくいきませんでした、確かな方法ではありません、私はこれを見つけました post そしてコードは `

// $ userに管理者の役割があるかどうかを確認します。 if(in_array( 'administrator'、array_values($ user-> roles))){//何かします。 }?> `

0
pinueve