प्रोग्रामेटिक रूप से उपयोगकर्ता की भूमिका असाइन करें


12

मेरी वेबसाइट पर मेरी कई भूमिकाएँ हैं, और मैं कुछ उपयोगकर्ताओं को मेरी साइट पर पंजीकरण करने के लिए एक निश्चित भूमिका सौंपना चाहता हूँ।

जब वे अपना पंजीकरण फॉर्म जमा करते हैं, तो मैं नए उपयोगकर्ताओं को प्रोग्रामिक रूप से एक विशिष्ट भूमिका कैसे प्रदान कर सकता हूं?
मैंने logintoboggan, autoassignrole जैसे मॉड्यूल की कोशिश की है, लेकिन वे पंजीकरण पर एक डिफ़ॉल्ट उपयोगकर्ता भूमिका प्रदान करते हैं, जब मैं अपनी साइट पर साइन अप करने वाले सभी उपयोगकर्ताओं को नहीं, बल्कि विशिष्ट उपयोगकर्ताओं को भूमिका प्रदान करना चाहता हूं।

जवाबों:


10

यद्यपि आप इसे "प्रोग्रामेटिक" नहीं मानते हैं, लेकिन आप ऐसा करने के लिए नियम मॉड्यूल का उपयोग कर सकते हैं ।

मॉड्यूल स्थापित करें और "नया उपयोगकर्ता खाता सहेजने के बाद" ईवेंट पर एक नया नियम बनाएं। कार्रवाई के लिए, आप उपयोगकर्ता की भूमिका एबीसी में सेट करना चाहते हैं (जहां एबीसी आपकी भूमिका चाहते हैं)।

आप शर्तों को जोड़कर विशिष्ट उपयोगकर्ताओं के लिए भूमिका सीमित कर सकते हैं। उदाहरण के लिए, आप "डेटा तुलना" स्थिति का उपयोग केवल नियम को लागू करने के लिए कर सकते हैं यदि उपयोगकर्ता ने पंजीकरण फॉर्म पर एक विशिष्ट मूल्य चुना है (विस्तृत उदाहरण: नियम को केवल उन उपयोगकर्ताओं तक सीमित करें जो पंजीकरण पर उनके लिंग के रूप में "महिला" का चयन करते हैं। )।

आपको प्रत्येक शर्त / भूमिका संयोजन के लिए एक नियम बनाना होगा जिसे आप पुरस्कार देना चाहते हैं। हालाँकि, नियम एक व्यापक रूप से उपयोग किया जाने वाला मॉड्यूल है और इसे मैन्युअल रूप से या फीचर्स मॉड्यूल के साथ निर्यात किया जा सकता है, जिससे आपको बहुत अधिक लचीलापन मिलता है।


13

हमने इस कार्य को user_multiple_role_edit () फ़ंक्शन के साथ भी हल किया है। हमारे usecase में हमने रजिस्टर-फॉर्म पर नहीं बल्कि मक्खी पर उपयोगकर्ताओं को बनाने के लिए एक विशेष मेनू-कॉलबैक पर प्रतिक्रिया की।

पहला: एक उपयोगकर्ता बनाएँ

$user = new stdClass();
$user->name = $name;
$user->status = 1;
user_save($user);

दूसरा: उपयोगकर्ता को भूमिका सौंपें

$role = user_role_load_by_name("my custom role");
user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);

5

इससे डिफ़ॉल्ट भूमिकाएँ 4,5 और 6 हो जाएँगी:

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id){
    $form['account']['roles']['#default_value'][] = '4';
    $form['account']['roles']['#default_value'][] = '5';
    $form['account']['roles']['#default_value'][] = '6';
}

2

मेरे मामले में केवल चार प्रोफ़ाइल 2 प्रोफाइल थे, लेकिन अगर व्यक्ति को उनके पंजीकरण फॉर्म में एक निश्चित मूल्य था, तो मुझे उन्हें एक नई भूमिका में जोड़ना होगा। मैंने जो किया था यह रहा:

<?php 
function MYMODULE_user_insert(&$edit, $account, $category){
  if (array_key_exists('profile_club', $account)) {
    $is_uni = FALSE;
    if ($account->profile_club['field_uni_club']['und'][0]['value'] == 1 ) {
      $is_uni = TRUE;
    }
    if ($is_uni) {
      $uid = $account->uid;
      $role_name = 'uni_club';
      if ($role = user_role_load_by_name($role_name)) {
        user_multiple_role_edit(array($uid), 'add_role', $role->rid);
      }
    }
  }
}
?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.