जवाबों:
जब तक प्रत्येक मॉड्यूल अपनी स्वयं की अनुमतियों को परिभाषित कर सकता है, तब तक उन स्ट्रिंग की "सख्त" सूची नहीं है। यदि आपको वास्तव में इस तरह की सूची प्रोग्राम करने की आवश्यकता है, तो आपको इसे "निर्माण" करने की आवश्यकता होगी।
आप इस स्क्रिप्ट को / 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);
}
}
जैसा कि @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;
}
यहाँ 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);
}
}
आप user_permission_get_modules()
फ़ंक्शन का उपयोग कर सकते हैं , जो सभी परिभाषित अनुमतियों और उनके मॉड्यूल की एक सरणी देता है।
उन मॉड्यूल को निर्धारित करें जो अनुमतियाँ संबंधित हैं।
प्रतिलाभ की मात्रा
प्रारूप में एक साहचर्य सरणी $ अनुमति => $ मॉड्यूल।
सबसे आसान तरीका अनुमति पृष्ठ (D7: व्यवस्थापक / लोग / अनुमतियां, D6: व्यवस्थापक / उपयोगकर्ता / अनुमतियाँ) की जाँच करना है। ध्यान दें कि आप सीधे Drupal 6 में प्रदर्शित स्ट्रिंग का उपयोग करते हैं, 7 के लिए आपको चेकबॉक्स के नाम / मूल्य पर एक नज़र डालने की आवश्यकता है। ऐसा इसलिए है क्योंकि अब अनुमति का Drupal 7 में अनुवादित शीर्षक और विवरण है।
इसलिए यदि आप ड्रुपल 7 में "प्रकाशित सामग्री देखें" अनुमति के लिए नाम चाहते हैं, तो मान "पहुंच सामग्री" है जो आपका अनुमति नाम है।
यदि आप जानते हैं कि किस मॉड्यूल से अनुमति आ रही है, तो आप उस मॉड्यूल के संबंधित हुक_परम () (D6) / हुक_प्रमाण () (D7) को भी जांच सकते हैं ।
कई मामलों में, आप अपने स्वयं के पेमेंट को परिभाषित करना चाहते हैं और इनका उपयोग करना चाहते हैं, आप उपरोक्त हुक के साथ ऐसा कर सकते हैं।
देवल मॉड्यूल का उपयोग करना
डेवेल मॉड्यूल को स्थापित करने और सक्षम करने के बाद , नेविगेट करें admin/config/development/devel
। एक सेटिंग है, जिसका शीर्षक है, "अनुमतियों और मॉड्यूल के प्रदर्शन मशीन नाम"। सुनिश्चित करें कि जाँच की है।
अब अनुमति पृष्ठ पर people/permissions
, जिस पूछताछ के लिए आप पूछताछ कर रहे हैं, उसके नाम पर होवर करें। यह एक या दो सेकंड में देरी कर सकता है, लेकिन फिर स्ट्रिंग मान दिखाएगा।
यहां एक सरल फ़ॉर्म परिवर्तन है जो अनुमति पृष्ठ पर नाम के लिए अनुमति कुंजी जोड़ देगा। जिससे इसे देखना आसान हो जाए। आपको इसे एक कस्टम मॉड्यूल में जोड़ना होगा और उस मॉड्यूल के नाम के साथ "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 . ')';
}
}
}
मैंने यह जावास्क्रिप्ट स्निपेट बनाया है जो मुझे इससे मदद करता है। मैंने इसे 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>");
});
यह आसान बनाने के लिए एक सरल मॉड्यूल है: प्रवेश तर्क सूची
सादर
बस कुछ मॉड्यूल में ड्रॉप, आप मशीन अनुमति / व्यवस्थापक / लोगों / अनुमतियों पर देखेंगे
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>)';
}
}
सादर
array_keys()
तो स्पष्ट रूप से केवल अनुरोधित जानकारी प्राप्त करें। इसके बाद आप परिणाम का उपयोग भी कर सकते हैंuser_role_grant_permissions
, उदाहरण के लिए, व्यवस्थापक की भूमिका को सभी अनुमतियाँ प्रदान करने के लिए:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));