मैं user_access ($ string) फ़ंक्शन के लिए उपलब्ध $ स्ट्रिंग मानों की सूची कैसे प्राप्त कर सकता हूं?


27

user_access ($ स्ट्रिंग, $ खाता = NULL)

$ स्ट्रिंग: अनुमति, जैसे "प्रशासन नोड्स", के लिए जाँच की जा रही है।

मैं user_access()फ़ंक्शन के लिए उपलब्ध $ स्ट्रिंग मूल्यों की सूची कैसे प्राप्त कर सकता हूं ?

जवाबों:


12

जब तक प्रत्येक मॉड्यूल अपनी स्वयं की अनुमतियों को परिभाषित कर सकता है, तब तक उन स्ट्रिंग की "सख्त" सूची नहीं है। यदि आपको वास्तव में इस तरह की सूची प्रोग्राम करने की आवश्यकता है, तो आपको इसे "निर्माण" करने की आवश्यकता होगी।

आप इस स्क्रिप्ट को / devel / php पेज पर चला सकते हैं। (बेशक, आपको डेवेल मॉड्यूल की आवश्यकता है ।)

// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
  print_r($module);
  // Drupal 6
  // if ($permissions = module_invoke($module, 'perm')) {
  //  print_r($permissions);
  // }

  // Drupal 7
  if ($permissions = module_invoke($module, 'permission')) {
    print_r($permissions);
  }
}

26

जैसा कि @Berdir ने कहा, यह देखने का सबसे आसान तरीका है कि कौन सी अनुमतियां उपलब्ध हैं, Drup 7 में अनुमतियाँ व्यवस्थापक / लोगों / अनुमतियों पर जाएँ।

समस्या यह रही कि मैं कभी भी यह पता नहीं लगा सका कि वास्तव में अनुमति का उपयोग करने के लिए मुझे 'एक्सेस तर्क' के रूप में आपूर्ति करने के लिए किस स्ट्रिंग की आवश्यकता है। खैर, यहां बताया गया है कि आप जिन अनुमतियों का उपयोग करना चाहते हैं, उनके लिए स्ट्रिंग नाम कैसे मिलता है (यह उदाहरण Google Chrome का उपयोग करता है।)

पहला कदम। व्यवस्थापन / लोगों / अनुमतियों पर जाएं उस अनुमति को प्राप्त करें जिसका आप उपयोग करना चाहते हैं और जिस चेक का आप उपयोग करना चाहते हैं उसके दाईं ओर एक चेक बॉक्स पर राइट क्लिक करें। 'इंस्पेक्ट एलिमेंट' चुनें या स्रोत को देखें।

उदाहरण

अगला चेक बॉक्स के मूल्य को देखें और मूल्य को नोट करें। (इस मामले में स्ट्रिंग 'कूपन सामग्री बनाएँ' है)

यहाँ छवि विवरण दर्ज करें

यह वह स्ट्रिंग है जिसे आपको हुक_मेनू में एक्सेस तर्क के रूप में आपूर्ति करने की आवश्यकता है ()

उदाहरण कोड: (गैर-प्रासंगिक आइटम हटा दिए गए हैं, शीर्षक, कॉलबैक आदि को हुक_मेनू () में न भूलें )

function fsrsys_menu() {
    $items = array();
    $items['my-custom-url'] = array(
        'access callback' => 'user_access',
        'access arguments' => array('create coupon content'),
    );
    return $items;
}

9

यहाँ Haza के उत्तर का D7 संस्करण है, प्रिंट_र के बजाय DSM का उपयोग करने के लिए और हुक_प्रमाणन लागू नहीं करने वाले मॉड्यूल को छोड़ने के लिए संशोधित किया गया है:

// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
  if ($permissions = module_invoke($module, 'permission')) {
    // List only the modules that have permissions.
    dsm($module);
    dsm($permissions);
  }
}

6

आप user_permission_get_modules()फ़ंक्शन का उपयोग कर सकते हैं , जो सभी परिभाषित अनुमतियों और उनके मॉड्यूल की एक सरणी देता है।

उन मॉड्यूल को निर्धारित करें जो अनुमतियाँ संबंधित हैं।

प्रतिलाभ की मात्रा

प्रारूप में एक साहचर्य सरणी $ अनुमति => $ मॉड्यूल।


2
यदि आप इसे आप में लपेटते हैं array_keys()तो स्पष्ट रूप से केवल अनुरोधित जानकारी प्राप्त करें। इसके बाद आप परिणाम का उपयोग भी कर सकते हैं user_role_grant_permissions, उदाहरण के लिए, व्यवस्थापक की भूमिका को सभी अनुमतियाँ प्रदान करने के लिए:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));
सकल

4

सबसे आसान तरीका अनुमति पृष्ठ (D7: व्यवस्थापक / लोग / अनुमतियां, D6: व्यवस्थापक / उपयोगकर्ता / अनुमतियाँ) की जाँच करना है। ध्यान दें कि आप सीधे Drupal 6 में प्रदर्शित स्ट्रिंग का उपयोग करते हैं, 7 के लिए आपको चेकबॉक्स के नाम / मूल्य पर एक नज़र डालने की आवश्यकता है। ऐसा इसलिए है क्योंकि अब अनुमति का Drupal 7 में अनुवादित शीर्षक और विवरण है।

इसलिए यदि आप ड्रुपल 7 में "प्रकाशित सामग्री देखें" अनुमति के लिए नाम चाहते हैं, तो मान "पहुंच सामग्री" है जो आपका अनुमति नाम है।

यदि आप जानते हैं कि किस मॉड्यूल से अनुमति आ रही है, तो आप उस मॉड्यूल के संबंधित हुक_परम () (D6) / हुक_प्रमाण () (D7) को भी जांच सकते हैं ।

कई मामलों में, आप अपने स्वयं के पेमेंट को परिभाषित करना चाहते हैं और इनका उपयोग करना चाहते हैं, आप उपरोक्त हुक के साथ ऐसा कर सकते हैं।


RE: "सबसे आसान तरीका अनुमति पृष्ठ (D7: व्यवस्थापक / लोग / अनुमतियाँ,) की जांच करना है।" पृष्ठ अनुमति की सूची दिखाता है, लेकिन वे मशीन पठनीय स्ट्रिंग के बजाय मानव पठनीय स्ट्रिंग हैं।
गिल्ज़रो

1
जैसा कि मैंने नीचे लिखा है, मशीन पठनीय नाम किसी भी अनुमति के लिए किसी भी चेकबॉक्स के मूल्य से निकाला जा सकता है।
बर्दिर

यह उत्तर Drupal 6 और 7 को कवर करता है, स्वीकृत केवल Drupal 6 - लेकिन स्वीकृत उत्तर एक साफ चाल है और Drupal 7. =) के लिए आसानी से बदला जा सकता है
ग्रेग

4

देवल मॉड्यूल का उपयोग करना

  • डेवेल मॉड्यूल को स्थापित करने और सक्षम करने के बाद , नेविगेट करें admin/config/development/devel। एक सेटिंग है, जिसका शीर्षक है, "अनुमतियों और मॉड्यूल के प्रदर्शन मशीन नाम"। सुनिश्चित करें कि जाँच की है।

  • अब अनुमति पृष्ठ पर people/permissions, जिस पूछताछ के लिए आप पूछताछ कर रहे हैं, उसके नाम पर होवर करें। यह एक या दो सेकंड में देरी कर सकता है, लेकिन फिर स्ट्रिंग मान दिखाएगा।


वाह, मुझे इस बारे में पता नहीं था। मैंने अपना उत्तर पोस्ट करने के बाद देखा। धन्यवाद!
बटांडवा

बहुत उपयोगी! TYVM।
DrCord

मीठा, मॉड्यूल कोड खोलने की तुलना में बहुत आसान है!
ब्लॉके_ज़रो

1

यहां एक सरल फ़ॉर्म परिवर्तन है जो अनुमति पृष्ठ पर नाम के लिए अनुमति कुंजी जोड़ देगा। जिससे इसे देखना आसान हो जाए। आपको इसे एक कस्टम मॉड्यूल में जोड़ना होगा और उस मॉड्यूल के नाम के साथ "mymodule" को बदलना होगा।

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
  foreach ($form['permission'] as $key => &$item) {
    if (isset($item['#type']) && $item['#type'] == 'item') {
      $item['#markup'] .= ' (' . $key . ')';
    }
  }
}

1

मैंने यह जावास्क्रिप्ट स्निपेट बनाया है जो मुझे इससे मदद करता है। मैंने इसे Drupal 7 में शाइनी थीम पर ही टेस्ट किया ।

यह मूल रूप से लेबल के तहत पहली सेल में, उस नाम पर पहले चेकबॉक्स से ली गई मशीन का नाम आउटपुट करता है। स्क्रिप्ट jQuery पर निर्भर करती है, जिसे Drupal 7 पर कोई समस्या नहीं होनी चाहिए।

मैं आमतौर पर इसे डेवलपर टूल कंसोल पर पेस्ट करता हूं और इसे वहां से चलाता हूं। मैं भविष्य में इसके लिए एक बुकमार्कलेट बना सकता हूं।

// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
    // Get the first checkbox in the row.
    checkbox = jQuery('.checkbox .form-checkbox', this).first();
    // Get the first cell, containing the permission label.
    nameCell = jQuery('td:first-child', this);
    // In case this is not a permission row
    if(checkbox.length == 0) {
        return;
    }

    // Embed the permission maching name on permission label cell.
    nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});

और Bookmarkify.it सेवा के लिए धन्यवाद आप यहां बुकमार्कलेट पा सकते हैं
बटांडवा

यह वास्तव में उपयोगी उपकरण है, ty!
DrCord



0

बस कुछ मॉड्यूल में ड्रॉप, आप मशीन अनुमति / व्यवस्थापक / लोगों / अनुमतियों पर देखेंगे

function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state) 
{
    $perms = &$form['permission'];

    $group_counter = 0;
    foreach ($perms as $k => &$v) {
        if ($k == $group_counter) { // skip fieldsets
            $group_counter++;
            continue;
        }

        $v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)'; 
    }
}

सादर

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