[development] How to add user role during registration with custom form

Randy Fay randy at randyfay.com
Sat Feb 27 01:10:30 UTC 2010

Of course, doing a direct operation on the database bypasses the entire
Drupal API, so other modules don't get a chance to interact. It assumes full
control of the database, and, while often useful, has that downside.
Operations like this bypass the capabilities of Role Change Notify and other
modules that might be listening for user changes.

I generally recommend using the API unless there's a huge performance reason
not to.


On Fri, Feb 26, 2010 at 5:29 PM, Steve Edwards <killshot91 at gmail.com> wrote:

> Yup, I like the more direct route like that.  Works great.
> Thanks.
> Steve
> On Feb 26, 2010, at 3:40 PM, nan wich wrote:
> You don't need to load the whole user object to do this - way too much
> potential overhead.
>   $uid = db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'",
> $name_you_just_got));
>   db_query("INSERT INTO {users_roles} (uid, rid) VALUES(%d, %d)", $uid,
> $rid_of_role_to_add);
> *Nancy E. Wichmann, PMP*
> Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L.
> King, Jr.
> ------------------------------
> *From:* Steve Edwards <killshot91 at gmail.com>
> *To:* Drupal Development <development at drupal.org>
> *Sent:* Fri, February 26, 2010 4:49:02 PM
> *Subject:* [development] How to add user role during registration with
> custom form
> I took over a site that uses a custom registration form that directly calls
> user_register_submit directly, and I need to have a user role added to this
> user when this form is submitted.  However, I can't add the value to
> $form_state['values']['roles'] because the function errors out if there is a
> roles array because it is seen as a 'malicious attempt to alter protected
> user fields.'  Since that function then calls user_save, it seems that once
> the user is saved, I need to 1) load the user I just created, 2) add the
> role to the object, and 3) save it again.  However, in order to call
> user_load, I need the uid, which isn't returned from user_register_submit.
> The only logical thing I can think to do is query the users table with the
> user name I just created (entered as part of the form), get the rid, and
> then call user_load and do my thing.
> Is there a better (and easier) way to do this that I'm missing, or am I on
> the right track?
> Thanks.
> Steve

Randy Fay
Drupal Development, troubleshooting, and debugging
randy at randyfay.com
+1  970.462.7450
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20100226/88a401aa/attachment.html 

More information about the development mailing list