namespace, '/role-manager', [ [ 'methods' => 'GET', 'callback' => [$this, 'get_data'], 'permission_callback' => [$this, 'check_permissions'], ], [ 'methods' => 'POST', 'callback' => [$this, 'save_matrix'], 'permission_callback' => [$this, 'check_permissions'], 'args' => [ 'matrix' => ['type' => 'object', 'required' => true], ], ], ]); } /** * Return roles, capabilities, and the current matrix. * * @return WP_REST_Response */ public function get_data(): WP_REST_Response { $roles = []; foreach (Capability_Manager::editable_roles() as $slug => $name) { $roles[] = [ 'slug' => $slug, 'name' => $name, // False when the role lacks the WordPress capability ThinkRank's // endpoints require on top of the section gate — the grant would // save and then do nothing (#576). 'can_use' => Capability_Manager::role_meets_baseline($slug), ]; } $capabilities = []; foreach (Capability_Manager::capabilities() as $key => $label) { $capabilities[] = ['key' => $key, 'label' => $label]; } return new WP_REST_Response([ 'success' => true, 'data' => [ 'roles' => $roles, 'capabilities' => $capabilities, 'matrix' => Capability_Manager::get_matrix(), 'base_cap' => Capability_Manager::ACCESS, 'baseline_cap' => Capability_Manager::BASELINE_CAPABILITY, ], ], 200); } /** * Save the matrix. * * @param WP_REST_Request $request Request. * @return WP_REST_Response */ public function save_matrix(WP_REST_Request $request): WP_REST_Response { $matrix = (array) $request->get_param('matrix'); Capability_Manager::save_matrix($matrix); return new WP_REST_Response([ 'success' => true, 'data' => ['matrix' => Capability_Manager::get_matrix()], ], 200); } }