[wp-trac] [WordPress Trac] #17924: Make Integrating Multiple Roles Per User Easier for Plugin Authors

WordPress Trac wp-trac at lists.automattic.com
Tue Jun 28 23:40:49 UTC 2011


#17924: Make Integrating Multiple Roles Per User Easier for Plugin Authors
-------------------------+-------------------------------------------------
 Reporter:  mobius5150   |      Owner:
     Type:  enhancement  |     Status:  new
 Priority:  normal       |  Milestone:  Awaiting Review
Component:               |    Version:  3.2
  Role/Capability        |   Keywords:  has-patch dev-feedback needs-
 Severity:  normal       |  testing
-------------------------+-------------------------------------------------
 WordPress supports multiple role per user, however to use this feature is
 very difficult for plugin authors to integrate well, and often requires
 adding plugin admin pages instead of integrating with the pre-existing
 user-edit.php. Due to the difficulty of this, and the fact that most
 plugins that allow this aren't very user-friendly, I believe users are
 staying away from multiple roles.

 This ticket aims to change how easy it is to work with the current role
 management system, as well as to add a couple role-based filters and
 actions, while still keeping the front-end of the administrative interface
 single-role only. (Because it seems to be the prevailing opinion the
 multiple roles per user is plugin territory.) In addition, I completely
 agree that the vast majority of sites can best function with one role per
 user, however in some cases (such as the site I'm working on now) you
 simply need to be able to choose multiple roles.

 = Changes =

 == First Patch File ==
 attachment:Replace_Admin_Role_Dropdown.patch
 The first patch file moves the code for the role dropdown off of /wp-admin
 /user-edit.php, /wp-admin/includesclass-wp-users-list-table.php, /wp-admin
 /users-new.php, /wp-admin/options-general.php and into /wp-
 admin/includes/template.php where two new functions are created:

 === {{{wp_get_dropdown_roles()}}} ===
 This function does what {{{wp_dropdown_roles}}} used to do, but it returns
 the value instead of echoing it. (Note that {{{wp_dropdown_roles()}}} now
 acts as a wrapper for {{{wp_get_dropdown_roles()}}}. (The old function is
 still in place for backwards compatibility.)

 === {{{wp_user_role_selector()}}} ===
 This function creates the full dropdown and applies a new
 {{{'user_role_selector'}}} filter to the markup before echoing it out.
 This way the default dropdown can be overridden by something else (perhaps
 checkboxes).

 == Second Patch File ==
 attachment:Create_Role_Update_Actions_Filters.patch
 The second patch file changes the functions that handle user creation and
 updating so they can be hooked into and a developer could make this work
 with multiple roles. This file affects /wp-admin/includes/users.php and
 /wp-includes/user.php.

 === {{{wp_sanitize_user_role()}}} ===
 A new {{{sanitize_user_role}}} filter was created and sanitation of
 {{{$_POST['role']}}} in /wp-admin/includes/user.php when user-edit.php is
 submitted was moved there. The new function is called
 {{{wp_sanitize_user_role()}}}. (This is so that if user-edit.php is
 submitted and {{{$_POST['role']}}} were to contain a value other than a
 string (perhaps an array of roles) it can be sanitized and worked with
 accordingly.

 === {{{pre_user_role}}} ===
 A new {{{pre_user_role}}} filter was added to {{{wp_insert_user()}}} in
 /wp-includes/user.php. This was mainly done because almost every other
 field that this function processes has a matching filter like this, and I
 thought maybe {{{$roles}}} felt left out as it did not. :(

 I supposed somebody could also use it for something useful as well.

 === {{{apply_user_role}}} ===
 A new {{{apply_user_role}}} action was added to {{{wp_insert_user()}}}.
 The function itself no longer uses {{{$user->set_role()}}}, instead saving
 user role changes is now handled by this new action. A matching function
 {{{wp_apply_user_role()}}} was added to set the user role like
 {{{wp_insert_user()}}} used to do. This way however, a plugin author could
 simply hook into {{{apply_user_role}}} to apply multiple roles to a user.

 = Conclusion =
 All in all, this patch was designed so that the average user would never
 even notice that a change has been made to user management, however a
 plugin author looking to add an easy way for people to select multiple
 roles for a user can quickly hook into this and have a nice, easy, well
 integrated and WordPress-like plugin.

 I have done a few tests adding users and changing roles around with these
 patches applied on a fresh installation with no plugins and the only
 changes to WordPress being those that are in the attached patches, and
 everything seems to work seamlessly.

 By the way, I am quite new to WordPress, so I added the needs-testing tag,
 because it does, but I also want to make sure I've done everything the
 'WordPress' way and I want to make sure I havn't missed anything that is
 broken because of these small changes.

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/17924>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list