Make WordPress Core


Ignore:
Timestamp:
01/16/2015 01:48:36 AM (12 years ago)
Author:
wonderboymusic
Message:

In WP_User, ->get_role_caps() and ->update_user_level_from_caps() must be called inside ->add_cap() and ->remove_cap() after updating user meta. ->has_cap() checks are currently failing directly after calling ->add_cap().

Adds unit test.

Props rachelbaker.
Fixes #28374.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/capabilities.php

    r31188 r31190  
    935935                $this->caps[$cap] = $grant;
    936936                update_user_meta( $this->ID, $this->cap_key, $this->caps );
     937                $this->get_role_caps();
     938                $this->update_user_level_from_caps();
    937939        }
    938940
     
    946948         */
    947949        public function remove_cap( $cap ) {
    948                 if ( ! isset( $this->caps[$cap] ) )
     950                if ( ! isset( $this->caps[ $cap ] ) ) {
    949951                        return;
    950                 unset( $this->caps[$cap] );
     952                }
     953                unset( $this->caps[ $cap ] );
    951954                update_user_meta( $this->ID, $this->cap_key, $this->caps );
     955                $this->get_role_caps();
     956                $this->update_user_level_from_caps();
    952957        }
    953958
Note: See TracChangeset for help on using the changeset viewer.