답변:
이것을 "프로그래밍 방식"으로 간주하지는 않지만 규칙 모듈을 사용하여 이를 수행 할 수 있습니다 .
"새 사용자 계정을 저장 한 후"이벤트에 모듈을 설치하고 새 규칙을 작성하십시오. 작업의 경우 사용자 역할을 ABC로 설정하려고합니다 (ABC는 할당하려는 역할).
조건을 추가하여 특정 사용자로 역할을 제한 할 수 있습니다. 예를 들어, 사용자가 등록 양식에서 특정 값을 선택한 경우에만 "데이터 비교"조건을 사용하여 규칙을 적용 할 수 있습니다 (상세 예 : 등록시 성별을 "여성"으로 선택한 사용자에게만 규칙을 제한하십시오. ).
수여하려는 각 조건 / 역할 조합에 대한 규칙을 만들어야합니다. 그러나 규칙은 널리 사용되는 모듈이며 수동으로 또는 기능 모듈과 함께 내보낼 수 있으므로 많은 유연성을 제공합니다.
또한 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);
필자의 경우에는 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);
}
}
}
}
?>