जांचें कि क्या किसी उपयोगकर्ता की कोई भूमिका है


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
क्या होगा यदि मैं 1 से अधिक भूमिका की जांच करना चाहता हूं। उदाहरण के लिए अगर "संपादक" या "प्रकाशक" फैंसी सामान करते हैं। कोड कैसे? सलाह दें। वास्तव में समझ नहीं सकते।
एडम्टन

8
कृपया जवाब पढ़ें: यह एक भूमिका (या एक से अधिक) के लिए जाँच करने के लिए अनुशंसित नहीं है। इसके बजाय अनुमतियों के लिए जाँच करें। आपके बाकी प्रश्न (अगर-स्टेटमेंट में दो शर्तों को मिलाकर) मूल PHP है, तो ड्रुपल-संबंधी कुछ भी नहीं। तार्किक ऑपरेटरों पर PHP प्रलेखन पढ़ें ।
marvvangend

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 ($ उपयोगकर्ता) कर सकते हैं। यह उपयोगकर्ता की भूमिका सहित सभी उपयोगकर्ता जानकारी के साथ एक सरणी प्रिंट करेगा।

इस सरणी से आप "भूमिकाओं" की सरणी स्थिति पा सकते हैं और उपयोगकर्ता की भूमिका खोजने के लिए अपने मॉड्यूल में इसका उपयोग कर सकते हैं।


विकास के तहत-> PHP कोड निष्पादित करें, दर्ज करें: वैश्विक $ उपयोगकर्ता; DPM ($ उपयोगकर्ता);
डायमंड्स

1

यदि रोल नेम को डेटाबेस में रोल टेबल में पाया जा सकता है, तो जांच के लिए भूमिका का नाम बदलने के मामले में भविष्य में होने वाला है।

यदि आप 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
असल में, जब आप भूमिकाओं जैसी चीजों को माइग्रेट करते हैं, तो मशीन का नाम संभवतः रखा जाएगा, और आईडी नहीं होगा
Mołot

रोल टेबल में कोई मशीन का नाम नहीं है बस एक छुटकारा है और एक मानवीय नाम है। Users_roles टेबल एक छुटकारा के लिए एक यूआईडी प्रदान करता है।
हंस रॉसलेल डे

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 ($ उपयोगकर्ता) द्वारा उपयोगकर्ता की भूमिका की जांच कर सकते हैं और आउटपुट में आपको कुछ इस तरह मिलेगा

stdClass ऑब्जेक्ट
(
    [uid] => ०
    [hostname] => :: 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

ऊपर दिए गए जवाबों से काम नहीं चला, निश्चित रूप से नहीं, मैंने पाया कि यह पोस्ट और कोड `होना चाहिए

// यह देखने के लिए जांचें कि क्या $ उपयोगकर्ता की व्यवस्थापक भूमिका है। if (in_array ('व्यवस्थापक', array_values ​​($ उपयोगकर्ता-> भूमिकाएँ))) {// कुछ करें। }}> `

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.