Make WordPress Core


Ignore:
Timestamp:
01/16/2015 01:48:36 AM (10 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.