Make WordPress Core

Ticket #42999: 42999.diff

File 42999.diff, 2.8 KB (added by imath, 9 years ago)
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

     
    891891                }
    892892
    893893                if ( ! empty( $schema['properties']['capabilities'] ) ) {
    894                         $data['capabilities'] = (object) $user->allcaps;
     894                        /**
     895                         * If the user has no role on a site of the network, make sure
     896                         * to populate his capabilities with Administrator ones if he
     897                         * is one of the Super Administrators.
     898                         */
     899                        if ( ! $user->allcaps && is_multisite() ) {
     900                                $site_roles = wp_roles();
     901                                $admin_caps = array_merge(
     902                                        $site_roles->get_role( 'administrator' )->capabilities,
     903                                        array( 'administrator' => true )
     904                                );
     905
     906                                $capabilities = array_fill_keys( array_keys( $admin_caps ), is_super_admin( $user->ID ) );
     907                                $allcaps      = wp_parse_args( $user->allcaps, array_filter( $capabilities ) );
     908
     909                        // Otherwise use user role's capabilities.
     910                        } else {
     911                                $allcaps = $user->allcaps;
     912                        }
     913
     914                        $data['capabilities'] = (object) $allcaps;
    895915                }
    896916
    897917                if ( ! empty( $schema['properties']['extra_capabilities'] ) ) {
  • tests/phpunit/tests/rest-api/rest-users-controller.php

     
    996996                $this->assertEquals( rest_url( 'wp/v2/users/' . self::$user ), $links['self'][0]['href'] );
    997997        }
    998998
     999        /**
     1000         * @group ms-required
     1001         */
     1002        public function test_get_current_user_ms() {
     1003                $this->allow_user_to_manage_multisite();
     1004                wp_set_current_user( self::$user );
     1005
     1006                $request = new WP_REST_Request( 'GET', '/wp/v2/users/me' );
     1007                $request->set_param( 'context', 'edit' );
     1008                $response = $this->server->dispatch( $request );
     1009                $data = $response->get_data();
     1010                $capabilities = $data['capabilities'];
     1011
     1012                $this->assertTrue( $capabilities->manage_options );
     1013
     1014                // Create a new site the SuperAdmin is not a member of.
     1015                $user_id = $this->factory->user->create();
     1016                $blog_id = $this->factory->blog->create( array( 'user_id' => $user_id ) );
     1017                switch_to_blog( $blog_id );
     1018
     1019                $request = new WP_REST_Request( 'GET', '/wp/v2/users/me' );
     1020                $request->set_param( 'context', 'edit' );
     1021                $response = $this->server->dispatch( $request );
     1022                $data = $response->get_data();
     1023
     1024                restore_current_blog();
     1025
     1026                $this->assertEquals( $capabilities, $data['capabilities'] );
     1027        }
     1028
    9991029        public function test_get_current_user_without_permission() {
    10001030                wp_set_current_user( 0 );
    10011031                $request  = new WP_REST_Request( 'GET', '/wp/v2/users/me' );