プログラムでユーザーロールを割り当てる


11

私のウェブサイトには複数の役割があり、ユーザーが自分のサイトに登録するときに、特定の役割を一部のユーザーに割り当てたいと考えています。

新しいユーザーが登録フォームを送信するときに、プログラムで特定の役割をプログラムで割り当てるにはどうすればよいですか?
logintoboggan、autoassignroleなどのモジュールを試しましたが、サイトにサインアップするすべてのユーザーではなく、特定のユーザーに役割を割り当てたい場合、登録時にデフォルトのユーザー役割が提供されます。

回答:


10

これを「プログラムによる」とは思わないかもしれませんが、ルールモジュールを使用してこれを行うことができます。

モジュールをインストールし、「新しいユーザーアカウントを保存した後」のイベントに新しいルールを作成します。アクションの場合、ユーザーロールをABCに設定する必要があります(ABCは割り当てるロールです)。

条件を追加して、役割を特定のユーザーに制限できます。たとえば、「データ比較」条件を使用して、ユーザーが登録フォームで特定の値を選択した場合にのみルールを適用できます(詳細な例:ルールを、登録時に性別として「女性」を選択したユーザーのみに制限します)。

付与する条件/役割の組み合わせごとにルールを作成する必要があります。ただし、ルールは広く使用されているモジュールであり、手動または機能モジュールでエクスポートできるため、柔軟性が大幅に向上します。


12

また、user_multiple_role_edit()関数を使用してこのタスクを解決しました。私たちのユースケースでは、登録フォームではなく、その場でユーザーを作成するための特別なメニューコールバックに反応しました。

最初:ユーザーを作成する

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

2番目:ユーザーをロールに割り当てます

$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プロファイルは4つしかありませんでしたが、その人が登録フォームで特定の値を持っている場合は、それらを新しい役割に追加する必要がありました。ここに私がやったことがあります:

<?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.