[wp-trac] Re: [WordPress Trac] #5255: Simplify role/capability for
easier cap => user lookups
WordPress Trac
wp-trac at lists.automattic.com
Thu Oct 25 03:26:08 GMT 2007
#5255: Simplify role/capability for easier cap => user lookups
-------------------------+--------------------------------------------------
Reporter: markjaquith | Owner: anonymous
Type: task | Status: new
Priority: normal | Milestone: 2.4
Component: General | Version:
Severity: normal | Resolution:
Keywords: |
-------------------------+--------------------------------------------------
Comment (by ryan):
The current implementation has several faults. Fetching all users with a
given role or capability is painful. This is due mainly to how things are
stored in arrays rather than rows in a table. Also, role definitions are
stored per-blog in the options table rather than globally. This creates
pain for those doing multi-blog WP. Finally, allowing multiple roles and
caps per user is extra complexity for little gain. It's a bunch of
largely unused cruft.
Limiting users to one role instead of multiple roles and capabilities
cleans up much of this. A user has one role and that's it. All
capabilities come through it. If you want to change what a user can do,
give the user a new role with a new set of capabilities. The user's
assigned role would no longer be stored in usermeta as an array but as a
single value. This allows easy fetching of all users with a given role
without having to parse array values out of a SELECT. To get all users
with a given capability, lookup which roles have that capability and fetch
users with those roles. Simpler code and queries, and also simpler
conceptually. What can this user do? Look at his role definition. He can
do only what his role allows. This is pretty much what we do at
wordpress.com to handle the many users there. Multiple role and
capability assignments get unmanageable pretty quickly.
The next phase would be to rewrite the role storage to use the proposed
sitemeta table so that we can fetch role definitions out of a proper table
instead of out of an array stored in the options table. We could directly
join on this, if desired, or we could continue doing the role cap lookup.
People would still have the option of foregoing storing the role
definitions in the DB altogether, which is what many multi-blog WP and
WPMU sites do.
We've had this redesign discussion several times since we created
capabilities. I think the time has come to fix this mess. No one likes
it as is.
--
Ticket URL: <http://trac.wordpress.org/ticket/5255#comment:5>
WordPress Trac <http://trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list