प्रोग्राम को भूमिकाओं की अनुमति कैसे दें?


26

मेरे पास कुछ अनुमतियाँ हैं जो मैं आसान स्थापना के लिए प्रोग्रामेटिक रूप से कुछ भूमिकाओं को असाइन करना चाहूंगा।

क्योंकि मैं मॉड्यूल को स्थापित कर रहा हूं और अनुमति और भूमिका दोनों बना रहा हूं, मेरे पास भूमिका आईडी नहीं है, जहां मैं अनुमतियां सेट करना चाहता हूं। अब तक मुझे केवल प्रोग्राम को भूमिका निभाने के तरीके मिले हैं जो रोल आईडी की जरूरत है।

मुझे आश्चर्य है कि अगर मैं किसी तरह अपने नाम (स्ट्रिंग) के साथ भूमिकाओं को देख सकता हूं, तो भूमिका आईडी को पुनः प्राप्त कर सकता हूं और फिर अनुमति दे सकता हूं। यह सिर्फ सही नहीं लगता है।


अनुमति तालिका रोल आईडी का उपयोग करती है, भूमिका नाम का नहीं। आपको रोल आईडी प्राप्त करने की आवश्यकता है, और फिर उस आईडी का उपयोग करके अनुमति जोड़ें। अनुमति तालिका को तब अनुमति के लिए स्ट्रिंग की आवश्यकता होती है, और इसे लागू करने वाले मॉड्यूल का नाम (कम से कम Drupal 7 पर); मुझे यकीन नहीं है कि मॉड्यूल नाम वास्तव में किसी भी तरह से उपयोग किया जाता है।
कियमलुनो

क्या ऐसा कुछ विशिष्ट है जिसे आप उस कोड के बारे में नहीं समझते हैं जिसे आपको उपयोग करना चाहिए? आपने किस कोड का उपयोग किया? अपना कोड दिखाना उपयोगी होगा; यह सुझाव देने में मदद करता है कि आपको क्या करने की आवश्यकता है, इसका उत्तर देने के लिए (जैसे कि आपके कोड में क्या गलत है, इसकी रिपोर्ट करना)।
कियमलुनो

जवाब के लिए धन्यवाद। मुझे लगता है कि मुझे डेटाबेस में आईडी देखना होगा। यह उतना मुश्किल नहीं होना चाहिए।
vogelsang

जवाबों:


1

फ़ीचर मॉड्यूल यह काफी अच्छी तरह से करता है, जिससे आप एक में गिर गई भूमिकाओं और अनुमतियों (और बहुत सारे अन्य सामान) को निर्यात करने की अनुमति देते हैं:

http://drupal.org/project/features

लेकिन अगर आप अपनी स्वयं की जाँच करना चाहते हैं तो अनुमतियाँ एपीआई:

http://drupal.org/project/permissions_api


2
समस्या यह है कि आप रोल आईडी नहीं जानते जब आप सुविधाओं का उपयोग करते हैं क्योंकि वे असाइन किए जाते हैं जब आप अपनी सुविधा स्थापित करते हैं। इसलिए, आपको अनुमतियाँ असाइन करने के लिए किसी न किसी तरह आईडी ढूंढनी होगी। यह संभवतः डेटाबेस में केवल एक लुकअप है।
vogelsang

24

इस तरह से सामान के लिए सुविधाएँ बहुत आसान है। हालाँकि, यदि आपको भूमिकाएँ बनाने और प्रोग्राम को अनुमति देने की आवश्यकता है, तो आपको डेटाबेस के माध्यम से खुदाई करने की आवश्यकता नहीं है।

जब आप एक नई उपयोगकर्ता भूमिका बनाते हैं user_role_save(), तो यह आपके द्वारा पास की गई नई उपयोगकर्ता भूमिका आईडी के साथ पास की गई वस्तु को अद्यतन करेगा। आप standard_install()मानक इंस्टॉलेशन प्रोफ़ाइल में फ़ंक्शन में इसका एक उदाहरण देख सकते हैं ।

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

इस उदाहरण से पता चलता है कि आप एक नई उपयोगकर्ता भूमिका बना सकते हैं, फिर उसकी ridसंपत्ति तक पहुँच सकते हैं, जो उसमें भरी हुई थी user_role_save()। यह भी दिखाता है कि उस भूमिका के लिए अनुमतियों को कैसे जोड़ा जाए user_role_grant_permissions()। इस स्थिति में, यह सभी उपलब्ध अनुमतियों को 'प्रशासक' की भूमिका प्रदान कर रहा है।

यदि आपको किसी अन्य व्यक्ति द्वारा बनाई गई उपयोगकर्ता भूमिका की आईडी प्राप्त करने की आवश्यकता है, तो आप user_role_load_by_name()उस उपयोगकर्ता भूमिका के लिए ऑब्जेक्ट प्राप्त करने के लिए उपयोग कर सकते हैं । तो फिर तुम बस के साथ आईडी ले लो $role->rid


2
यह एक ही बार में कई अनुमतियाँ देने / रद्द करने के लिए अच्छा है: api.drupal.org/api/drupal/modules%21user%21user.module/function/…
ब्रायन वुड


20

मैं एक कोड उदाहरण जोड़ना चाहूंगा जो मूल प्रश्नों के करीब है कि कैसे मौजूदा भूमिकाओं के लिए प्रोग्रामेटिक रूप से अनुमति प्रदान करें।

आप उनके नाम के साथ भूमिकाओं को देख सकते हैं, भूमिका आईडी को पुनः प्राप्त कर सकते हैं और फिर अनुमति निम्नानुसार असाइन कर सकते हैं (उदाहरण के लिए एक हुक-अप कार्यान्वयन में):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.