回答:
これを「プログラムによる」とは思わないかもしれませんが、ルールモジュールを使用してこれを行うことができます。
モジュールをインストールし、「新しいユーザーアカウントを保存した後」のイベントに新しいルールを作成します。アクションの場合、ユーザーロールをABCに設定する必要があります(ABCは割り当てるロールです)。
条件を追加して、役割を特定のユーザーに制限できます。たとえば、「データ比較」条件を使用して、ユーザーが登録フォームで特定の値を選択した場合にのみルールを適用できます(詳細な例:ルールを、登録時に性別として「女性」を選択したユーザーのみに制限します)。
付与する条件/役割の組み合わせごとにルールを作成する必要があります。ただし、ルールは広く使用されているモジュールであり、手動または機能モジュールでエクスポートできるため、柔軟性が大幅に向上します。
また、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);
私の場合、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);
}
}
}
}
?>