@@ -31,12 +31,12 @@ class Api {
3131 protected $ routes = [
3232 // phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
3333 'GET ' => [
34- 'options ' => [ 'callback ' => [ 'Settings ' , 'getOptions ' ], 'access ' => 'everyone ' ],
35- 'ping ' => [ 'callback ' => [ 'Ping ' , 'ping ' ], 'access ' => 'everyone ' ],
36- 'post ' => [ 'callback ' => [ 'PostsTerms ' , 'getPostData ' ], 'access ' => 'everyone ' ],
34+ 'options ' => [ 'callback ' => [ 'Settings ' , 'getOptions ' ], 'access ' => 'any ' ],
35+ 'ping ' => [ 'callback ' => [ 'Ping ' , 'ping ' ], 'access ' => 'any ' ],
36+ 'post ' => [ 'callback ' => [ 'PostsTerms ' , 'getPostData ' ], 'access ' => 'any ' ],
3737 'post/(?P<postId>[\d]+)/first-attached-image ' => [ 'callback ' => [ 'PostsTerms ' , 'getFirstAttachedImage ' ], 'access ' => 'aioseo_page_social_settings ' ],
3838 'user/(?P<userId>[\d]+)/image ' => [ 'callback ' => [ 'User ' , 'getUserImage ' ], 'access ' => 'aioseo_page_social_settings ' ],
39- 'tags ' => [ 'callback ' => [ 'Tags ' , 'getTags ' ], 'access ' => 'everyone ' ],
39+ 'tags ' => [ 'callback ' => [ 'Tags ' , 'getTags ' ], 'access ' => 'any ' ],
4040 'search-statistics/url/auth ' => [ 'callback ' => [ 'SearchStatistics ' , 'getAuthUrl ' ], 'access ' => [ 'aioseo_search_statistics_settings ' , 'aioseo_general_settings ' , 'aioseo_setup_wizard ' ] ], // phpcs:ignore Generic.Files.LineLength.MaxExceeded
4141 'search-statistics/url/reauth ' => [ 'callback ' => [ 'SearchStatistics ' , 'getReauthUrl ' ], 'access ' => [ 'aioseo_search_statistics_settings ' , 'aioseo_general_settings ' ] ],
4242 'writing-assistant/keyword/(?P<postId>[\d]+) ' => [ 'callback ' => [ 'WritingAssistant ' , 'getPostKeyword ' ], 'access ' => 'aioseo_page_writing_assistant_settings ' ],
@@ -74,7 +74,7 @@ class Api {
7474 'terms-list/update-details-column ' => [ 'callback ' => [ 'PostsTerms ' , 'updateTermDetailsColumn ' ], 'access ' => 'aioseo_page_general_settings ' ],
7575 'keyphrases ' => [ 'callback ' => [ 'PostsTerms ' , 'updatePostKeyphrases ' ], 'access ' => 'aioseo_page_analysis ' ],
7676 'analyze ' => [ 'callback ' => [ 'Analyze ' , 'analyzeSite ' ], 'access ' => 'aioseo_seo_analysis_settings ' ],
77- 'analyze-headline ' => [ 'callback ' => [ 'Analyze ' , 'analyzeHeadline ' ], 'access ' => 'everyone ' ],
77+ 'analyze-headline ' => [ 'callback ' => [ 'Analyze ' , 'analyzeHeadline ' ], 'access ' => 'any ' ],
7878 'analyze-headline/delete ' => [ 'callback ' => [ 'Analyze ' , 'deleteHeadline ' ], 'access ' => 'aioseo_seo_analysis_settings ' ],
7979 'analyze/delete-site ' => [ 'callback ' => [ 'Analyze ' , 'deleteSite ' ], 'access ' => 'aioseo_seo_analysis_settings ' ],
8080 'clear-log ' => [ 'callback ' => [ 'Tools ' , 'clearLog ' ], 'access ' => 'aioseo_tools_settings ' ],
@@ -100,7 +100,7 @@ class Api {
100100 'notification/v3-migration-schema-number-reminder ' => [ 'callback ' => [ 'Notifications ' , 'migrationSchemaNumberReminder ' ], 'access ' => 'any ' ],
101101 'notifications/dismiss ' => [ 'callback ' => [ 'Notifications ' , 'dismissNotifications ' ], 'access ' => 'any ' ],
102102 'objects ' => [ 'callback ' => [ 'PostsTerms ' , 'searchForObjects ' ], 'access ' => [ 'aioseo_search_appearance_settings ' , 'aioseo_sitemap_settings ' ] ], // phpcs:ignore Generic.Files.LineLength.MaxExceeded
103- 'options ' => [ 'callback ' => [ 'Settings ' , 'saveChanges ' ], 'access ' => 'any ' ],
103+ 'options ' => [ 'callback ' => [ 'Settings ' , 'saveChanges ' ], 'access ' => 'options ' ],
104104 'plugins/deactivate ' => [ 'callback ' => [ 'Plugins ' , 'deactivatePlugins ' ], 'access ' => 'aioseo_feature_manager_settings ' ],
105105 'plugins/install ' => [ 'callback ' => [ 'Plugins ' , 'installPlugins ' ], 'access ' => [ 'install_plugins ' , 'aioseo_feature_manager_settings ' ] ],
106106 'plugins/upgrade ' => [ 'callback ' => [ 'Plugins ' , 'upgradePlugins ' ], 'access ' => [ 'update_plugins ' , 'aioseo_feature_manager_settings ' ] ],
@@ -308,9 +308,34 @@ public function validateAccess( $request ) {
308308 }
309309
310310 switch ( $ routeData ['access ' ] ) {
311- case 'everyone ' :
312- // Any user is able to access the route.
313- return true ;
311+ case 'any ' :
312+ // The user has access if he has any of our capabilities.
313+ $ user = wp_get_current_user ();
314+ $ aioseoCaps = aioseo ()->access ->getCapabilityList ();
315+ foreach ( $ user ->get_role_caps () as $ capability => $ enabled ) {
316+ if ( $ enabled && in_array ( $ capability , $ aioseoCaps , true ) ) {
317+ return true ;
318+ }
319+ }
320+
321+ return false ;
322+ case 'options ' :
323+ // Check that user has access to any of the options pages.
324+ $ user = wp_get_current_user ();
325+ $ aioseoCaps = aioseo ()->access ->getCapabilityList ();
326+
327+ // Remove all caps that start with aioseo_page_
328+ $ aioseoCaps = array_filter ( $ aioseoCaps , function ( $ capability ) {
329+ return strpos ( $ capability , 'aioseo_page_ ' ) !== 0 ;
330+ } );
331+
332+ foreach ( $ user ->get_role_caps () as $ capability => $ enabled ) {
333+ if ( $ enabled && in_array ( $ capability , $ aioseoCaps , true ) ) {
334+ return true ;
335+ }
336+ }
337+
338+ return false ;
314339 default :
315340 return aioseo ()->access ->hasCapability ( $ routeData ['access ' ] );
316341 }
0 commit comments