settings = $settings; } /** * Hooks map_meta_cap(). */ public function register(): void { add_filter( 'map_meta_cap', array( $this, 'map_meta_cap' ), 10, 4 ); } /** * Resolves the VIEW meta capability to a primitive capability. * * @param string[] $caps Required primitive capabilities. * @param string $cap The requested meta capability. * @param int $user_id The user being checked. * @param array $args Additional arguments (unused; kept for the map_meta_cap signature). * @return string[] */ public function map_meta_cap( array $caps, string $cap, int $user_id, array $args ): array { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed if ( self::VIEW !== $cap ) { return $caps; } if ( user_can( $user_id, 'manage_options' ) ) { return array( 'exist' ); } $user = get_userdata( $user_id ); if ( false === $user ) { return array( 'do_not_allow' ); } $report_roles = (array) $this->settings->get( 'report_roles' ); $user_roles = (array) $user->roles; if ( array_intersect( $report_roles, $user_roles ) ) { return array( 'exist' ); } return array( 'do_not_allow' ); } }