Changeset 38960
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php
r38942 r38960 452 452 } 453 453 454 $taxonomy_obj = get_taxonomy( $this->taxonomy ); 455 if ( ! current_user_can( $taxonomy_obj->cap->edit_terms ) ) { 454 if ( ! current_user_can( 'edit_term', $term->term_id ) ) { 456 455 return new WP_Error( 'rest_cannot_update', __( 'Sorry, you cannot update resource.' ), array( 'status' => rest_authorization_required_code() ) ); 457 456 } … … 528 527 return new WP_Error( 'rest_term_invalid', __( "Resource doesn't exist." ), array( 'status' => 404 ) ); 529 528 } 530 $taxonomy_obj = get_taxonomy( $this->taxonomy ); 531 if ( ! current_user_can( $taxonomy_obj->cap->delete_terms) ) {529 530 if ( ! current_user_can( 'delete_term', $term->term_id ) ) { 532 531 return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you cannot delete resource.' ), array( 'status' => rest_authorization_required_code() ) ); 533 532 } -
trunk/tests/phpunit/tests/rest-api/rest-tags-controller.php
r38941 r38960 534 534 } 535 535 536 /** 537 * @ticket 38505 538 */ 539 public function test_update_item_with_edit_term_cap_granted() { 540 wp_set_current_user( self::$subscriber ); 541 $term = $this->factory->tag->create_and_get(); 542 $request = new WP_REST_Request( 'POST', '/wp/v2/tags/' . $term->term_id ); 543 $request->set_param( 'name', 'New Name' ); 544 545 add_filter( 'map_meta_cap', array( $this, 'grant_edit_term' ), 10, 2 ); 546 $response = $this->server->dispatch( $request ); 547 remove_filter( 'user_has_cap', array( $this, 'grant_edit_term' ), 10, 2 ); 548 549 $this->assertEquals( 200, $response->get_status() ); 550 $data = $response->get_data(); 551 $this->assertEquals( 'New Name', $data['name'] ); 552 } 553 554 public function grant_edit_term( $caps, $cap ) { 555 if ( 'edit_term' === $cap ) { 556 $caps = array( 'read' ); 557 } 558 return $caps; 559 } 560 561 /** 562 * @ticket 38505 563 */ 564 public function test_update_item_with_edit_term_cap_revoked() { 565 wp_set_current_user( self::$administrator ); 566 $term = $this->factory->tag->create_and_get(); 567 $request = new WP_REST_Request( 'POST', '/wp/v2/tags/' . $term->term_id ); 568 $request->set_param( 'name', 'New Name' ); 569 570 add_filter( 'map_meta_cap', array( $this, 'revoke_edit_term' ), 10, 2 ); 571 $response = $this->server->dispatch( $request ); 572 remove_filter( 'user_has_cap', array( $this, 'revoke_edit_term' ), 10, 2 ); 573 574 $this->assertErrorResponse( 'rest_cannot_update', $response, 403 ); 575 } 576 577 public function revoke_edit_term( $caps, $cap ) { 578 if ( 'edit_term' === $cap ) { 579 $caps = array( 'do_not_allow' ); 580 } 581 return $caps; 582 } 583 536 584 public function test_update_item_parent_non_hierarchical_taxonomy() { 537 585 wp_set_current_user( self::$administrator ); … … 577 625 $response = $this->server->dispatch( $request ); 578 626 $this->assertErrorResponse( 'rest_cannot_delete', $response, 403 ); 627 } 628 629 /** 630 * @ticket 38505 631 */ 632 public function test_delete_item_with_delete_term_cap_granted() { 633 wp_set_current_user( self::$subscriber ); 634 $term = get_term_by( 'id', $this->factory->tag->create( array( 'name' => 'Deleted Tag' ) ), 'post_tag' ); 635 $request = new WP_REST_Request( 'DELETE', '/wp/v2/tags/' . $term->term_id ); 636 $request->set_param( 'force', true ); 637 638 add_filter( 'map_meta_cap', array( $this, 'grant_delete_term' ), 10, 2 ); 639 $response = $this->server->dispatch( $request ); 640 remove_filter( 'map_meta_cap', array( $this, 'grant_delete_term' ), 10, 2 ); 641 642 $this->assertEquals( 200, $response->get_status() ); 643 $data = $response->get_data(); 644 $this->assertEquals( 'Deleted Tag', $data['name'] ); 645 } 646 647 public function grant_delete_term( $caps, $cap ) { 648 if ( 'delete_term' === $cap ) { 649 $caps = array( 'read' ); 650 } 651 return $caps; 652 } 653 654 /** 655 * @ticket 38505 656 */ 657 public function test_delete_item_with_delete_term_cap_revoked() { 658 wp_set_current_user( self::$administrator ); 659 $term = get_term_by( 'id', $this->factory->tag->create( array( 'name' => 'Deleted Tag' ) ), 'post_tag' ); 660 $request = new WP_REST_Request( 'DELETE', '/wp/v2/tags/' . $term->term_id ); 661 $request->set_param( 'force', true ); 662 663 add_filter( 'map_meta_cap', array( $this, 'revoke_delete_term' ), 10, 2 ); 664 $response = $this->server->dispatch( $request ); 665 remove_filter( 'map_meta_cap', array( $this, 'revoke_delete_term' ), 10, 2 ); 666 667 $this->assertErrorResponse( 'rest_cannot_delete', $response, 403 ); 668 } 669 670 public function revoke_delete_term( $caps, $cap ) { 671 if ( 'delete_term' === $cap ) { 672 $caps = array( 'do_not_allow' ); 673 } 674 return $caps; 579 675 } 580 676
Note: See TracChangeset
for help on using the changeset viewer.