it-swarm.asia

تحقق مما إذا كان للمستخدم دور

كيف يمكنني التحقق مما إذا كان للمستخدم دور معين؟

لقد وجدت هذا ولكنها لـ 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
Sadanand Kenganal

تحديث للإصدار Drupal> = 7.36

يمكنك استخدام الوظيفة user_has_role من Drupal API https://api.drupal.org/api/drupal/modules٪21user٪21user.module/function/user_has_role/7 .

جرب هذا المثال:

<?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). سيؤدي هذا إلى طباعة صفيف يحتوي على كافة معلومات المستخدم بما في ذلك دور المستخدم.

من هذا الصفيف ، يمكنك العثور على موضع الصفيف لـ "الأدوار" واستخدامه في الوحدة النمطية الخاصة بك للعثور على دور المستخدم.

2
Subramanian Hariharan

لكي تكون مستقبليًا في حالة تغير اسم الدور ، من الأفضل التحقق من معرف الدور (التخلص) الذي يمكن العثور عليه في جدول الدور في قاعدة البيانات.

إذا كنت تريد التحقق من وجود دور مع التخلص 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 Object 
 (
 [uid] => 0 
 [hostname] => :: 1 
 [role] => 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

فوق الإجابات لم تنجح ، الطريق غير متأكد ، لقد وجدت هذا مشاركة ويجب أن يكون الرمز `

// تحقق لمعرفة ما إذا كان $ user لديه دور المسؤول. if (in_array ('administrator'، array_values ​​($ user-> الأدوار))) {// افعل شيئًا. }؟> `

0
pinueve