Make WordPress Core

Ticket #38284: 38284.diff

File 38284.diff, 5.2 KB (added by tharsheblows, 8 years ago)

adds capabilities and updates unit tests

  • src/wp-includes/capabilities.php

     
    5151                        $caps[] = 'edit_users'; // edit_user maps to edit_users.
    5252                }
    5353                break;
     54        case 'edit_user_meta':
     55        case 'delete_user_meta':
     56        case 'add_user_meta':
     57                $user = get_user_by( 'id', $args[0] );
     58                if( ! $user ){
     59                        $caps[] = 'do_not_allow';
     60                        break;
     61                }
     62               
     63                $caps = map_meta_cap( 'edit_user', $user_id, $user->ID );
     64
     65                $meta_key = isset( $args[ 1 ] ) ? $args[ 1 ] : false;
     66
     67                if ( $meta_key && ( has_filter( "auth_user_meta_{$meta_key}" ) ) ) {
     68                        /**
     69                         * Filters whether the user is allowed to add user meta to a user.
     70                         *
     71                         * The dynamic portion of the hook name, `$meta_key`, refers to the
     72                         * meta key passed to map_meta_cap().
     73                         *
     74                         * @since 4.7.0
     75                         *
     76                         * @param bool   $allowed  Whether the user can add the user meta. Default false.
     77                         * @param string $meta_key The meta key.
     78                         * @param int    $user->ID The user being edited.
     79                         * @param int    $user_id  User ID.
     80                         * @param string $cap      Capability name.
     81                         * @param array  $caps     User capabilities.
     82                         */
     83                        $allowed = apply_filters( "auth_user_meta_{$meta_key}", false, $meta_key, $user->ID, $user_id, $cap, $caps );
     84       
     85                        if ( ! $allowed ){
     86                                $caps[] = $cap;
     87                        }
     88                }
     89                break;
     90
    5491        case 'delete_post':
    5592        case 'delete_page':
    5693                $post = get_post( $args[0] );
     
    314351                        $caps = map_meta_cap( 'edit_posts', $user_id );
    315352                }
    316353                break;
     354        case 'edit_comment_meta':
     355        case 'delete_comment_meta':
     356        case 'add_comment_meta':
     357                $comment = get_comment( $args[0] );
     358                if ( ! $comment ) {
     359                        $caps[] = 'do_not_allow';
     360                        break;
     361                }
     362
     363                $caps = map_meta_cap( 'edit_comment', $user_id, $comment->comment_post_ID );
     364               
     365                $meta_key = isset( $args[ 1 ] ) ? $args[ 1 ] : false;
     366
     367                if ( $meta_key && ( has_filter( "auth_comment_meta_{$meta_key}" ) ) ) {
     368                        /**
     369                         * Filters whether the user is allowed to add comment meta to a comment.
     370                         *
     371                         * The dynamic portion of the hook name, `$meta_key`, refers to the
     372                         * meta key passed to map_meta_cap().
     373                         *
     374                         * @since 4.7.0
     375                         *
     376                         * @param bool   $allowed  Whether the user can add the comment meta. Default false.
     377                         * @param string $meta_key The meta key.
     378                         * @param int    $comment_id  Post ID.
     379                         * @param int    $user_id  User ID.
     380                         * @param string $cap      Capability name.
     381                         * @param array  $caps     User capabilities.
     382                         */
     383                        $allowed = apply_filters( "auth_comment_meta_{$meta_key}", false, $meta_key, $comment->comment_post_ID, $user_id, $cap, $caps );
     384       
     385                        if ( ! $allowed ){
     386                                $caps[] = $cap;
     387                        }
     388                }
     389                break;
    317390        case 'unfiltered_upload':
    318391                if ( defined('ALLOW_UNFILTERED_UPLOADS') && ALLOW_UNFILTERED_UPLOADS && ( !is_multisite() || is_super_admin( $user_id ) )  )
    319392                        $caps[] = $cap;
     
    428501                $caps = map_meta_cap( $tax->cap->$taxo_cap, $user_id, $term_id );
    429502
    430503                break;
     504        case 'edit_term_meta':
     505        case 'delete_term_meta':
     506        case 'add_term_meta':
     507                $term_id = $args[0];
     508                $term = get_term( $term_id );
     509                if ( ! $term || is_wp_error( $term ) ) {
     510                        $caps[] = 'do_not_allow';
     511                        break;
     512                }
     513
     514                $caps = map_meta_cap( 'edit_term', $user_id, $term_id );
     515
     516                $meta_key = isset( $args[ 1 ] ) ? $args[ 1 ] : false;
     517
     518                if ( $meta_key && ( has_filter( "auth_term_meta_{$meta_key}" ) ) ) {
     519                        /**
     520                         * Filters whether the user is allowed to add comment meta to a comment.
     521                         *
     522                         * The dynamic portion of the hook name, `$meta_key`, refers to the
     523                         * meta key passed to map_meta_cap().
     524                         *
     525                         * @since 4.7.0
     526                         *
     527                         * @param bool   $allowed  Whether the user can add the comment meta. Default false.
     528                         * @param string $meta_key The meta key.
     529                         * @param int    $comment_id  Post ID.
     530                         * @param int    $user_id  User ID.
     531                         * @param string $cap      Capability name.
     532                         * @param array  $caps     User capabilities.
     533                         */
     534                        $allowed = apply_filters( "auth_term_meta_{$meta_key}", false, $meta_key, $term_id, $user_id, $cap, $caps );
     535       
     536                        if ( ! $allowed ){
     537                                $caps[] = $cap;
     538                        }
     539                }
     540                break;
     541
    431542        case 'manage_post_tags':
    432543        case 'edit_categories':
    433544        case 'edit_post_tags':
  • tests/phpunit/tests/user/capabilities.php

     
    406406                        $expected['remove_user'],
    407407                        $expected['promote_user'],
    408408                        $expected['edit_user'],
     409                        $expected['edit_user_meta'],
     410                        $expected['delete_user_meta'],
     411                        $expected['add_user_meta'],                     
    409412                        $expected['delete_post'],
    410413                        $expected['delete_page'],
    411414                        $expected['edit_post'],
     
    417420                        $expected['delete_post_meta'],
    418421                        $expected['add_post_meta'],
    419422                        $expected['edit_comment'],
     423                        $expected['edit_comment_meta'],
     424                        $expected['delete_comment_meta'],
     425                        $expected['add_comment_meta'],
    420426                        $expected['edit_term'],
    421427                        $expected['delete_term'],
    422428                        $expected['assign_term'],
     429                        $expected['edit_term_meta'],
     430                        $expected['delete_term_meta'],
     431                        $expected['add_term_meta'],                     
    423432                        $expected['delete_user']
    424433                );
    425434