Skip to content

Commit 581c155

Browse files
committed
Add capability check to the getCoauthorsMigrationData ajax callback, S-PPA-002
1 parent e358637 commit 581c155

File tree

4 files changed

+60
-8
lines changed

4 files changed

+60
-8
lines changed

src/core/Capability.php

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* @package MultipleAuthors\
4+
* @author PublishPress <[email protected]>
5+
* @copyright Copyright (C) 2018 PublishPress. All rights reserved.
6+
* @license GPLv2 or later
7+
* @since 1.0.0
8+
*/
9+
10+
namespace MultipleAuthors;
11+
12+
defined('ABSPATH') or die('No direct script access allowed.');
13+
14+
15+
abstract class Capability
16+
{
17+
public static function getManageAuthorsCapability()
18+
{
19+
return apply_filters('pp_multiple_authors_manage_authors_cap', 'ppma_manage_authors');
20+
}
21+
22+
public static function getManageOptionsCapability()
23+
{
24+
return apply_filters('pp_multiple_authors_manage_settings_cap', 'manage_options');
25+
}
26+
27+
public static function getEditPostAuthorsCapability()
28+
{
29+
return apply_filters('pp_multiple_authors_edit_post_authors', 'ppma_edit_post_authors');
30+
}
31+
32+
public static function currentUserCanManageSettings()
33+
{
34+
return current_user_can(self::getManageOptionsCapability());
35+
}
36+
37+
public static function currentUserCanManageAuthors()
38+
{
39+
return current_user_can(self::getManageAuthorsCapability());
40+
}
41+
42+
public static function currentUserCanEditPostAuthors()
43+
{
44+
return current_user_can(self::getEditPostAuthorsCapability());
45+
}
46+
}

src/core/Classes/Installer.php

+4-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
namespace MultipleAuthors\Classes;
2525

26+
use MultipleAuthors\Capability;
2627
use MultipleAuthors\Classes\Objects\Author;
2728
use WP_Role;
2829

@@ -323,9 +324,9 @@ public static function createAuthorTermsForPostsWithLegacyCoreAuthors($args = nu
323324
private static function addDefaultCapabilitiesForAdministrators()
324325
{
325326
$role = get_role('administrator');
326-
$role->add_cap('ppma_manage_authors');
327-
$role->add_cap('manage_options');
328-
$role->add_cap('ppma_edit_post_authors');
327+
$role->add_cap(Capability::getManageAuthorsCapability());
328+
$role->add_cap(Capability::getManageAuthorsCapability());
329+
$role->add_cap(Capability::getEditPostAuthorsCapability());
329330
}
330331

331332
/**

src/modules/multiple-authors/multiple-authors.php

+7-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
* along with PublishPress. If not, see <http://www.gnu.org/licenses/>.
2222
*/
2323

24+
use MultipleAuthors\Capability;
2425
use MultipleAuthors\Classes\Admin_Ajax;
2526
use MultipleAuthors\Classes\Author_Utils;
2627
use MultipleAuthors\Classes\Installer;
@@ -1695,8 +1696,7 @@ public function handle_maintenance_task()
16951696
wp_die(esc_html__('Invalid nonce', 'publishpress-authors'));
16961697
}
16971698

1698-
$capability = apply_filters('pp_multiple_authors_manage_settings_cap', 'manage_options');
1699-
if (! current_user_can($capability)) {
1699+
if (! Capability::currentUserCanManageSettings()) {
17001700
wp_die(esc_html__('Access denied', 'publishpress-authors'));
17011701
}
17021702

@@ -2124,6 +2124,10 @@ public function getCoauthorsMigrationData()
21242124
wp_send_json_error(null, 403);
21252125
}
21262126

2127+
if (! Capability::currentUserCanManageSettings()) {
2128+
wp_send_json_error(null, 403);
2129+
}
2130+
21272131
// nonce: migrate_coauthors
21282132
wp_send_json(
21292133
[
@@ -2470,7 +2474,7 @@ public function coauthorsMigrationNotice()
24702474
return;
24712475
}
24722476

2473-
if (!current_user_can('manage_options')) {
2477+
if (! Capability::currentUserCanManageSettings()) {
24742478
return;
24752479
}
24762480

src/modules/settings/settings.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
* along with PublishPress. If not, see <http://www.gnu.org/licenses/>.
2929
*/
3030

31+
use MultipleAuthors\Capability;
3132
use MultipleAuthors\Classes\Legacy\Module;
3233
use MultipleAuthors\Classes\Legacy\Util;
3334
use MultipleAuthors\Factory;
@@ -98,7 +99,7 @@ public function action_admin_submenu()
9899
MA_Multiple_Authors::MENU_SLUG,
99100
esc_html__('Multiple Authors Settings', 'publishpress-authors'),
100101
esc_html__('Settings', 'publishpress-authors'),
101-
apply_filters('pp_multiple_authors_manage_settings_cap', 'manage_options'),
102+
Capability::getManageOptionsCapability(),
102103
self::MENU_SLUG,
103104
[$this, 'options_page_controller'],
104105
20
@@ -297,7 +298,7 @@ public function helper_settings_validate_and_save()
297298
return false;
298299
}
299300

300-
if (!current_user_can('manage_options') || !wp_verify_nonce($_POST['_wpnonce'], 'edit-publishpress-settings')) {
301+
if (!Capability::currentUserCanManageSettings() || !wp_verify_nonce($_POST['_wpnonce'], 'edit-publishpress-settings')) {
301302
wp_die(__('Cheatin&#8217; uh?'));
302303
}
303304

0 commit comments

Comments
 (0)