जवाबों:
चूँकि आप पहले ही उस पोस्ट को देख चुके हैं , इसलिए सुनिश्चित करें कि आप टिप्पणियों को भी पढ़ें। यह स्पष्ट रूप से बताता है कि किसी भूमिका के लिए जाँच करने के लिए अनुमति की जाँच क्यों की जाती है। जब आप अनुमतियों का उपयोग करते हैं, तो आप उस अनुमति को कई भूमिकाओं के लिए असाइन कर सकते हैं, जो आपके सिस्टम को अधिक लचीला बनाता है। इसके अलावा, याद रखें कि भूमिकाओं का नाम बदला जा सकता है, जो आपके कोड को तोड़ देगा।
उन्होंने कहा, यदि आप किसी भूमिका की जांच करना चाहते हैं, तो आप यह कर सकते हैं:
// 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
}
यह जाँचने के लिए कि क्या वर्तमान उपयोगकर्ता की एकल भूमिका या कई भूमिकाएँ हैं, एक शानदार तरीका है:
//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
}
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...
}
}
?>
आप devel मॉड्यूल स्थापित कर सकते हैं और dpm ($ उपयोगकर्ता) कर सकते हैं। यह उपयोगकर्ता की भूमिका सहित सभी उपयोगकर्ता जानकारी के साथ एक सरणी प्रिंट करेगा।
इस सरणी से आप "भूमिकाओं" की सरणी स्थिति पा सकते हैं और उपयोगकर्ता की भूमिका खोजने के लिए अपने मॉड्यूल में इसका उपयोग कर सकते हैं।
यदि रोल नेम को डेटाबेस में रोल टेबल में पाया जा सकता है, तो जांच के लिए भूमिका का नाम बदलने के मामले में भविष्य में होने वाला है।
यदि आप 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
}
यहाँ टिप्पणी से वास्तविक कोड है जिसे सबसे अच्छे अभ्यास के रूप में स्वीकृत उत्तर में संदर्भित किया गया है
<?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!
}
}
?>