กำหนดบทบาทผู้ใช้โดยทางโปรแกรม


12

ฉันมีหลายบทบาทในเว็บไซต์ของฉันและฉันต้องการกำหนดบทบาทบางอย่างให้กับผู้ใช้บางคนเมื่อพวกเขาลงทะเบียนกับเว็บไซต์ของฉัน

ฉันจะกำหนดบทบาทเฉพาะให้กับผู้ใช้ใหม่โดยทางโปรแกรมเมื่อส่งแบบฟอร์มลงทะเบียนได้อย่างไร
ฉันได้ลองใช้โมดูลเช่น logintoboggan, autoassignrole แต่พวกเขามีบทบาทผู้ใช้เริ่มต้นในการลงทะเบียนเมื่อฉันต้องการกำหนดบทบาทให้กับผู้ใช้ที่เฉพาะเจาะจงไม่ใช่ผู้ใช้ทั้งหมดที่ลงทะเบียนในเว็บไซต์ของฉัน

คำตอบ:


10

ในขณะที่คุณอาจไม่ถือว่าสิ่งนี้เป็น "แบบเป็นโปรแกรม" คุณสามารถใช้โมดูลกฎเพื่อทำสิ่งนี้

ติดตั้งโมดูลและสร้างกฎใหม่ในเหตุการณ์ "หลังจากบันทึกบัญชีผู้ใช้ใหม่" สำหรับการดำเนินการคุณจะต้องตั้งค่าบทบาทผู้ใช้เป็น ABC (โดยที่ ABC คือบทบาทที่คุณต้องการมอบหมาย)

คุณสามารถ จำกัด บทบาทให้กับผู้ใช้เฉพาะโดยการเพิ่มเงื่อนไข ตัวอย่างเช่นคุณสามารถใช้เงื่อนไข "การเปรียบเทียบข้อมูล" เพื่อใช้กฎเฉพาะเมื่อผู้ใช้เลือกค่าเฉพาะในแบบฟอร์มการลงทะเบียน (ตัวอย่างโดยละเอียด: จำกัด กฎเฉพาะผู้ใช้ที่เลือก "เพศหญิง" เป็นเพศของพวกเขาในการลงทะเบียน )

คุณจะต้องสร้างกฎสำหรับการรวมเงื่อนไข / บทบาทแต่ละอย่างที่คุณต้องการให้รางวัล อย่างไรก็ตามกฎเป็นโมดูลที่ใช้กันอย่างแพร่หลายและสามารถส่งออกด้วยตนเองหรือกับโมดูลคุณสมบัติให้คุณมีความยืดหยุ่นมาก


13

นอกจากนี้เรายังแก้ไขงานนี้กับuser_multiple_role_edit ()ฟังก์ชั่น ในกรณีของเราเราไม่ได้ตอบสนองต่อแบบฟอร์มลงทะเบียน แต่เป็นการโทรกลับเมนูพิเศษเพื่อสร้างผู้ใช้งานได้ทันที

ก่อน: สร้างผู้ใช้

$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

ในกรณีของฉันมีโปรไฟล์ profile2 เพียงสี่โปรไฟล์ แต่ถ้าบุคคลนั้นมีค่าที่แน่นอนในแบบฟอร์มการลงทะเบียนของพวกเขาฉันต้องเพิ่มพวกเขาในบทบาทใหม่ นี่คือสิ่งที่ฉันทำ:

<?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);
      }
    }
  }
}
?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.