From c6f773aa9d0507fca88dc6d5a8d8e8ad473e5680 Mon Sep 17 00:00:00 2001 From: Mike van den Hoek Date: Mon, 4 May 2026 11:03:56 +0200 Subject: [PATCH] feat: filter required cap admin pages --- owc-activity-log.php | 1 + src/Controllers/AdminPageController.php | 4 ++-- src/Providers/AdminServiceProvider.php | 4 ++-- src/helpers.php | 10 ++++++++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/owc-activity-log.php b/owc-activity-log.php index 81b1df4..2d4e8c1 100644 --- a/owc-activity-log.php +++ b/owc-activity-log.php @@ -42,6 +42,7 @@ const OWC_ACTIVITY_LOG_SETTINGS_KEY = 'owc_activity_log_settings'; const OWC_ACTIVITY_LOG_CRON_HOOK = 'owc_activity_log_cleanup'; const OWC_ACTIVITY_LOG_DEFAULT_RETENTION_DAYS = 30; +const OWC_ACTIVITY_LOG_SETTINGS_PAGE_CAP = 'manage_options'; require_once __DIR__ . '/src/helpers.php'; require_once __DIR__ . '/src/autoload.php'; diff --git a/src/Controllers/AdminPageController.php b/src/Controllers/AdminPageController.php index c2762dd..ae2c103 100644 --- a/src/Controllers/AdminPageController.php +++ b/src/Controllers/AdminPageController.php @@ -34,7 +34,7 @@ class AdminPageController */ public function render_log(): void { - if ( ! current_user_can( 'manage_options' ) ) { + if ( ! current_user_can( settings_page_cap() ) ) { wp_die( esc_html__( 'You do not have permission to view this page.', 'owc-activity-log' ) ); } @@ -60,7 +60,7 @@ public function render_log(): void */ public function render_settings(): void { - if ( ! current_user_can( 'manage_options' ) ) { + if ( ! current_user_can( settings_page_cap() ) ) { wp_die( esc_html__( 'You do not have permission to view this page.', 'owc-activity-log' ) ); } diff --git a/src/Providers/AdminServiceProvider.php b/src/Providers/AdminServiceProvider.php index 66d3373..216acc1 100644 --- a/src/Providers/AdminServiceProvider.php +++ b/src/Providers/AdminServiceProvider.php @@ -46,7 +46,7 @@ public function register_menu(): void add_menu_page( __( 'Activity Tracker', 'owc-activity-log' ), __( 'Activity Log', 'owc-activity-log' ), - 'manage_options', + settings_page_cap(), OWC_ACTIVITY_LOG_SLUG, $controller->render_log( ... ), 'dashicons-visibility', @@ -59,7 +59,7 @@ public function register_menu(): void OWC_ACTIVITY_LOG_SLUG, __( 'Activity Log', 'owc-activity-log' ), __( 'Activity Log', 'owc-activity-log' ), - 'manage_options', + settings_page_cap(), OWC_ACTIVITY_LOG_SLUG, '' ); diff --git a/src/helpers.php b/src/helpers.php index 09c5562..69a2789 100644 --- a/src/helpers.php +++ b/src/helpers.php @@ -80,3 +80,13 @@ function owc_activity_log_group_enabled( string $group ): bool return in_array( $group, $settings['enabled_groups'], true ); } + +/** + * @since NEXT + */ +function settings_page_cap(): string +{ + $cap = apply_filters( 'owc_activity_log_admin_page_overview_cap', OWC_ACTIVITY_LOG_SETTINGS_PAGE_CAP ); + + return is_string( $cap ) && '' !== trim( $cap ) ? $cap : OWC_ACTIVITY_LOG_SETTINGS_PAGE_CAP; +}