On one of the Drupal 6 projects we had the need to assign a specific role to all users who create their own account (by visiting 'user/register'). Let's say the role is 'abc' and the role id (rid) is 3. So every new user should have the 'abc' role automatically. After much reseach I found the winning formula :-)
The obvious part is that we have to implement the hook_user in a custom module. But what
is not obvious is which $op to attach to, and then which of the parameters to manipulate and how. Here's the code for my implementation.
function mymodule_user($op, &$edit, &$account, $category = NULL){ global $user; // if the user is anonymous and creating a new account. if($op == 'insert' && $user->uid == 0) { $edit['roles'][3] = TRUE; } }
In the above code, the name of my module is 'mymodule' and it is implementing the hook_user. Inside the hook, we access the $user global to check that the current user is anonymous ($user->uid == 0), so that we do not interfere with an administrator creating a new user and choosing roles for them. The $op we attach to is 'insert' because that is the $op executed when a new account is created. The trickiest part of all is the fact that instead of manipulating the $account param, or even calling user_multiple_role_edit, we manipulate $edit because that is the data that is being persisted to the database. Also, the structure of roles within $edit is peculiar, in that it needs use the role id (rid) as the index and boolean TRUE as the value, in order to assign a role to the user.
Hope someone finds this useful.
tags: Knowledge Base drupal