Lập trình phân công vai trò người dùng


11

Tôi có nhiều vai trò trên trang web của mình và tôi muốn chỉ định một vai trò nhất định cho một số người dùng khi họ đăng ký vào trang web của tôi.

Làm cách nào tôi có thể chỉ định một vai trò cụ thể cho người dùng mới theo chương trình khi họ gửi biểu mẫu đăng ký của họ?
Tôi đã thử các mô-đun như logintoboggan, autoassignrole, nhưng chúng cung cấp vai trò người dùng mặc định khi đăng ký, khi tôi muốn gán vai trò cho người dùng cụ thể, không phải cho tất cả người dùng đăng ký trên trang web của tôi.

Câu trả lời:


10

Mặc dù bạn có thể không coi đây là "lập trình", bạn có thể sử dụng mô-đun Quy tắc để thực hiện việc này.

Cài đặt mô-đun và tạo quy tắc mới cho sự kiện "Sau khi lưu tài khoản người dùng mới." Đối với hành động, bạn sẽ muốn đặt vai trò người dùng thành ABC (trong đó ABC là vai trò bạn muốn gán).

Bạn có thể giới hạn vai trò cho người dùng cụ thể bằng cách thêm điều kiện. Ví dụ: bạn có thể sử dụng điều kiện "So sánh dữ liệu" để chỉ áp dụng quy tắc nếu người dùng đã chọn một giá trị cụ thể trên biểu mẫu đăng ký (ví dụ chi tiết: giới hạn quy tắc chỉ những người dùng chọn "nữ" làm giới tính khi đăng ký ).

Bạn sẽ phải tạo một quy tắc cho từng kết hợp điều kiện / vai trò mà bạn muốn trao giải. Tuy nhiên, Rules là một mô-đun được sử dụng rộng rãi và có thể được xuất thủ công hoặc với mô-đun Tính năng, mang lại cho bạn rất nhiều tính linh hoạt.


12

Chúng tôi cũng đã giải quyết tác vụ này với hàm user_mult Môn_role_edit () . Trong usecase của chúng tôi, chúng tôi đã không phản ứng trên biểu mẫu đăng ký mà trên một cuộc gọi lại menu đặc biệt để tạo người dùng một cách nhanh chóng.

Đầu tiên: Tạo người dùng

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

Thứ hai: Gán người dùng cho vai trò

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

5

Điều này sẽ làm cho các vai trò mặc định 4,5 và 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

Trong trường hợp của tôi chỉ có bốn hồ sơ profile2, nhưng nếu người đó có một giá trị nhất định trong mẫu đăng ký của họ, tôi phải thêm chúng vào một vai trò mới. Đây là những gì tôi đã làm:

<?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);
      }
    }
  }
}
?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.