以编程方式分配用户角色


12

我的网站上有多个角色,当某些用户注册到我的网站时,我想为其分配特定的角色。

当新用户提交注册表格时,我该如何以编程方式为新用户分配特定角色?
我尝试了诸如logintoboggan,autoassignrole之类的模块,但是当我想将角色分配给特定用户而不是我网站上所有注册的用户时,它们会在注册时提供默认的用户角色。

Answers:


10

虽然您可能不认为这是“程序性的”,但可以使用“ 规则”模块来执行此操作。

安装模块并在“保存新用户帐户之后”事件上创建新规则。对于该操作,您需要将用户角色设置为ABC(其中ABC是要分配的角色)。

您可以通过添加条件将角色限制为特定用户。例如,您可以使用“数据比较”条件仅在用户在注册表单上选择了特定值时应用规则(详细示例:将规则限制为仅在注册时选择“女性”作为其性别的用户)。

您将必须为要授予的每个条件/角色组合创建一个规则。但是,“规则”是一个使用广泛的模块,可以手动导出或与“功能”模块一起导出,从而为您提供了很大的灵活性。


13

我们还使用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);

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个人资料,但是如果此人在他们的注册表中具有一定的价值,我必须将其添加到新角色中。这是我所做的:

<?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);
      }
    }
  }
}
?>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.