From c19264ac916707096fe294d996a1b7fb85206b34 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 08 Mar 2026 19:55:31 +0000
Subject: [PATCH] =Furthering along the complete refactor. Added some basic setup for is_content taxonomies, including a page for an archive of the terms.

---
 inc/rest/PermissionHandler.php |   36 ++++++++++--------------------------
 1 files changed, 10 insertions(+), 26 deletions(-)

diff --git a/inc/rest/PermissionHandler.php b/inc/rest/PermissionHandler.php
index 409d479..f59f7c2 100644
--- a/inc/rest/PermissionHandler.php
+++ b/inc/rest/PermissionHandler.php
@@ -345,36 +345,17 @@
 	 */
 	public static function verifyActionNonce(WP_REST_Request $request, string $actionPrefix, string $header = 'X-Action-Nonce'): bool|WP_Error
 	{
-		$userId = $request->get_param('user') ?: get_current_user_id();
+		$userId = absint($request->get_param('user'));
+		if ($userId === 0) {
+			return false;
+		}
+
 		$action = $actionPrefix . $userId;
 
 		return self::verifyNonce($request, $action, $header);
 	}
 
 	/**
-	 * Combined permission check: user match + rate limit
-	 */
-	public static function userMatchWithRateLimit(WP_REST_Request $request): bool|WP_Error
-	{
-		static $rateLimiter = null;
-
-		if ($rateLimiter === null) {
-			$rateLimiter = new RateLimiter();
-		}
-
-		// Check rate limit first
-		if (!$rateLimiter->checkLimit($request)) {
-			return new WP_Error(
-				'rate_limit',
-				'Too many requests. Please wait before trying again.',
-				['status' => 429]
-			);
-		}
-
-		return self::userMatch($request);
-	}
-
-	/**
 	 * Create a custom permission callback combining multiple checks
 	 *
 	 * Usage:
@@ -390,9 +371,11 @@
 					$check === 'admin' => self::isAdmin($request),
 					$check === 'verified' => self::isVerified($request),
 					$check === 'user' => self::userMatch($request),
+					$check === 'nonce' => self::verifyNonce($request),
 					is_array($check) && isset($check['role']) => self::hasRole($request, $check['role']),
 					is_array($check) && isset($check['roles']) => self::hasAnyRole($request, $check['roles']),
 					is_array($check) && isset($check['capability']) => self::hasCapability($request, $check['capability']),
+					is_array($check) && isset($check['actionNonce']) => self::verifyActionNonce($request, $check['actionNonce']),
 					is_callable($check) => $check($request),
 					default => true,
 				};
@@ -424,18 +407,19 @@
 					$check === 'admin' => self::isAdmin($request),
 					$check === 'verified' => self::isVerified($request),
 					$check === 'user' => self::userMatch($request),
+					$check === 'nonce' => self::verifyNonce($request),
 					is_array($check) && isset($check['role']) => self::hasRole($request, $check['role']),
+					is_array($check) && isset($check['roles']) => self::hasAnyRole($request, $check['roles']),
 					is_array($check) && isset($check['capability']) => self::hasCapability($request, $check['capability']),
+					is_array($check) && isset($check['actionNonce']) => self::verifyActionNonce($request, $check['actionNonce']),
 					is_callable($check) => $check($request),
 					default => false,
 				};
 
-				// If it's a successful check (true), pass
 				if ($result === true) {
 					return true;
 				}
 
-				// Track last error for reporting
 				if (is_wp_error($result)) {
 					$lastError = $result;
 				}

--
Gitblit v1.10.0