Roles and Capabilities in bbPress 2.2

bbPress 2.2 implements a new way to think about user roles in both WordPress and bbPress. A few users have posted up having issues after upgrading, so I’m going to take some time to explain what changed and why.

The problem bbPress 2.2 addresses, is the situation where a users ability to take certain actions in the forums was dictated by their role on the entire site, or their “blog role” as I’ll refer to it in some places going forward.

This means that in the past, a user could not be both a blog Editor and a forum Moderator at the same time; you’d need to be one or the other, and it was clear this wasn’t what anybody wanted.

In bbPress 2.0 and 2.1, every time you activated bbPress on a site, it went in and added a bunch of capabilities to the database. You never knew this, but it needed these roles so that users could perform certain tasks. bbPress would go in and modify the core WordPress roles, to add these capabilities to them. This made multisite installations a challenge, and network activation was very difficult too, because these roles needed to be added to every single site.

For existing users of sites, bbPress performed a bunch of calculations and educated guesses to automatically grant users with certain roles and capabilities. To do this, it would eventually need to add capabilities to the user, or switch them to a role that had those capabilities already; Forum Participant.

Subsequent updates to bbPress required database migration scripts for every change to user roles and capabilities. This is a lot of work for very little gain, since we’re not solving any problems with users needing multiple roles, and at the same time we’re polluting the database with a bunch of data that doesn’t change 99% of the time.

—

Under the hood, WordPress comes with support for users having multiple roles, and this is a perfect use-case for needing that functionality. Roles are just groups of capabilities. If a user has a role, it’s safe to assume they also have certain capabilities, right?

Wrong. Kind of. Sometimes.

Capabilities are saved in the database, per user, per site, and they bubble based on the role they are granted. If you use any plugin that modifies editable roles or capabilities in the database, what you’re doing is changing the individual capabilities for every user that gets that role going forward, but not necessarily every user that had that role in the past.

Remember, individual users have individual capabilities. When a user gets a new role that is modified in some way, they also get assigned the changed capabilities, either positive or negative. Negative capabilities are explicitly negative, and neither WordPress nor bbPress use these in core. They’re tricky, and make it easy to break things.

Once you’ve gone this far in, you’re playing with fire and will likely get burned. You now have altered core user roles, extra forum user roles, and a mish-mash of registered users with a random assortment of capabilities, based on when they signed up, what role they were granted, and what you happened to have changed that blog role’s capabilities to be at that moment.

To top this all off, there is no “repair” for your users, they’re basically stuck.

For bbPress users that never modified user roles or capabilities, their update process would be smooth sailing. It’s the modifications to database permissions that cause issues with bbPress 2.2. Why?

bbPress 2.2 introduces the concept of “dynamic roles” VS WordPress’s “editable roles.” What’s the difference? Editable roles are saved in the database, and allow you to completely shoot yourself in the foot (as above) once you start changing them around. Dynamic roles do not touch the database in any way, other than to assign the 1 role to the user, side-by-side with any other role they might have on your site.

bbPress comes with filters to allow you to modify the roles, and it’s still possible to add or subtract specific forum capabilities to a user if you needed to, and without all the fuss and danger of bbPress interfering with existing user roles and capabilities.

For users that are stuck with users that can’t access the forums, try using the forums role repair tool, located in: Admin > Tools > Forums

That tool loops through your users, and grants them a forum role based on their blog role based on the following map:

The map can be filtered, as can the default role of Participant. The problem will come in with existing users that have modified Participant roles that you may have tinkered with. They’ll end up with capabilities that are totally out of whack, no matter what you do. You’ll need to use an additional tool on top of this, if you want to clean up those old roles introduced by plugins like S2member.

Going forward, I’d like to get a better idea on what these plugins are doing, and make sure that bbPress plays as nicely as it can with them. Dynamic roles in WordPress core are probably a few releases away, but it’s important to bbPress’s future to have them in and working as soon as possible, to get everything dialed in for everyone.

When creating new user, bbPress role is not added. I don’t have any roles plugins or anything like that. I create new Subscriber user, and it doesn’t get bbPress role. I am using bbPress 2.2.3. Is there something needed to make this work, or should it work automatically?

EDIT: OK, there is a setting to allow this, and it is disabled by default for some reason.

EDIT 2: And no luck, even with this option ON, roles are still not assigned to new users.

I want some of my users to be identified by their knowledge so the mebers know who is responding and the accuracy of the info provided (ie. Mentor, Advisor, …).

From the first message in this post

bbPress comes with filters to allow you to modify the roles, and it’s still possible to add or subtract specific forum capabilities to a user if you needed to, and without all the fuss and danger of bbPress interfering with existing user roles and capabilities.

I understand it is possible to add new roles but can not find how to do it!

I guess my problem that subscribers/forum participants after the update of bbPress 2.2 can no longer edit their profile page (and all subscribers/participants before could) are a result of the incompatibility of bbPress and the Members plugin?
Do I still need the Members plugin now that the roles for WordPress and bbPress are no longer one?

Would I be able to have a user that is an Editor be able to create forums? I made this user a Keymaster, but it looks like I have to grant the user the ‘manage_options’ capability to get the Forums menu item to show. Is there another way? Thanks.

@webheadllc – That’s a bit of an oversight on my part. The ‘manage_options’ capability was an easy check originally, and you’re right that Key Masters should be able to create forums. I’ll make sure it’s fixed in 2.3.

This is a great discussion, and thanks for the fantastic post, John!
I have a client who has a 3.4.1 multisite install with custom users roles. She wants certain of her users, who aren’t admins, to be able to (Condition 1) moderate their new bbPress forums – 2.1.3. But, she doesn’t want them to even be able to (Condition 2) even see the other plugins in the Dashboard. I’m concerned about using manage_options because I don’t know whether it would fulfill condition #1. What is the best way to set this up?

For users that are stuck with users that can’t access the forums, try using the forums role repair tool, located in: Admin > Tools > Forums

yet some of my users still don’t have access to the forums when they are logged in. I run a multisite with buddypress and no additional membership plugins. I’m not sure what to try next. Any suggestions?

The code that does not allow me to post as a Participant is this:
if ( !bbp_check_for_blacklist( $anonymous_data, $reply_author, $reply_title, $reply_content ) )
bbp_add_error( ‘bbp_reply_blacklist’, __( ‘ERROR: Your reply cannot be created at this time.’, ‘bbpress’ ) );

So it looks some blacklist check is working on. And the question is, where in the setup of WordPress, is located the blacklisted information, to verify why this is happening.

By the way, if that function only does what it looks to do by its name, I commented it.
Everything works now.

I read this entire thread and I am still unclear about this. On my site, I am trying to make a user Keymaster. The user’s WordPress role is subscriber and I want them to have the forum role of the keymaster. The problem is that the user can not see Forums menu item on their dashboard and can not perform keymaster actions. So how do we make someone a keymaster without giving them access to administration of the whole site?

@noumaan I just tested this and everything works as expected with a WordPress user with the WP role ‘Subscriber’ and bbPress role ‘Keymaster’
These following are the only admin panels available/visible in the WP admin dashboard:

I am still having issues trying to allow my regular subscribers to have access to the forums. They can see the members section and the other parts but anything associated with the forums doesn’t work. I do not want to give them admin privileges. I have tried the repair suggested by Amy Joy. I don’t know what else to do as this is a MAJOR part of my site. Any suggestions?

I want you to reply my query because I am the kind of guy who always go by logic and I am not able to find any logic how to resolve my issue. I know this is not proper thread to ask but I waited 2 days before I could post in this bbpress forum since they always deleted my post before now. In case I have only one topic in my profile so I am avoiding to write url in this thread not to disturb you guys 🙂

So I found a fix for my error. I downloaded the user role editor and found that all of my permissions had been changed for the subscriber. Changed them back to allow forum access and it’s been working just as before.