Secara terprogram menetapkan peran pengguna


11

Saya memiliki beberapa peran di situs web saya, dan saya ingin menetapkan peran tertentu kepada beberapa pengguna ketika mereka mendaftar ke situs saya.

Bagaimana saya bisa menetapkan peran khusus untuk pengguna baru secara terprogram ketika mereka mengirimkan formulir pendaftaran mereka?
Saya telah mencoba modul seperti logintoboggan, autoassignrole, tetapi mereka memberikan peran pengguna default pada pendaftaran, ketika saya ingin menetapkan peran untuk pengguna tertentu, bukan untuk semua pengguna yang mendaftar di situs saya.

Jawaban:


10

Meskipun Anda mungkin tidak menganggap ini sebagai "terprogram," Anda dapat menggunakan modul Aturan untuk melakukan ini.

Instal modul dan buat aturan baru pada acara "Setelah menyimpan akun pengguna baru." Untuk tindakan, Anda ingin mengatur peran pengguna ke ABC (di mana ABC adalah peran yang ingin Anda tetapkan).

Anda dapat membatasi peran untuk pengguna tertentu dengan menambahkan kondisi. Misalnya, Anda dapat menggunakan kondisi "Perbandingan data" untuk hanya menerapkan aturan tersebut jika pengguna telah memilih nilai tertentu pada formulir pendaftaran (contoh terperinci: batasi aturan hanya untuk pengguna yang memilih "wanita" sebagai jenis kelamin saat pendaftaran ).

Anda harus membuat aturan untuk setiap kombinasi kondisi / peran yang ingin Anda berikan. Namun, Aturan adalah modul yang banyak digunakan dan dapat diekspor secara manual atau dengan modul Fitur, memberi Anda banyak fleksibilitas.


12

Kami juga menyelesaikan tugas ini dengan fungsi user_multiple_role_edit () . Di usecase kami, kami tidak bereaksi pada formulir register tetapi pada menu-callback khusus untuk membuat pengguna on the fly.

Pertama: Buat pengguna

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

Kedua: Tetapkan pengguna ke peran

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

5

Ini akan membuat peran default 4,5 dan 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

Dalam kasus saya hanya ada empat profil2 profil, tetapi jika orang itu memiliki nilai tertentu dalam formulir pendaftaran mereka, saya harus menambahkannya ke peran baru. Inilah yang saya lakukan:

<?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);
      }
    }
  }
}
?>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.