Files
WooNooW/includes/Api/Permissions.php
dwindown 232059e928 feat: Complete Dashboard API Integration with Analytics Controller
 Features:
- Implemented API integration for all 7 dashboard pages
- Added Analytics REST API controller with 7 endpoints
- Full loading and error states with retry functionality
- Seamless dummy data toggle for development

📊 Dashboard Pages:
- Customers Analytics (complete)
- Revenue Analytics (complete)
- Orders Analytics (complete)
- Products Analytics (complete)
- Coupons Analytics (complete)
- Taxes Analytics (complete)
- Dashboard Overview (complete)

🔌 Backend:
- Created AnalyticsController.php with REST endpoints
- All endpoints return 501 (Not Implemented) for now
- Ready for HPOS-based implementation
- Proper permission checks

🎨 Frontend:
- useAnalytics hook for data fetching
- React Query caching
- ErrorCard with retry functionality
- TypeScript type safety
- Zero build errors

📝 Documentation:
- DASHBOARD_API_IMPLEMENTATION.md guide
- Backend implementation roadmap
- Testing strategy

🔧 Build:
- All pages compile successfully
- Production-ready with dummy data fallback
- Zero TypeScript errors
2025-11-04 11:19:00 +07:00

32 lines
1020 B
PHP

<?php
namespace WooNooW\Api;
class Permissions {
/**
* Allow anonymous (frontend checkout), but if a nonce is present,
* validate it for extra protection in admin/privileged contexts.
*
* Usage: 'permission_callback' => [Permissions::class, 'anon_or_wp_nonce']
*/
public static function anon_or_wp_nonce(): bool {
// If user is logged in with proper caps, allow.
if (is_user_logged_in()) {
return true;
}
// If nonce header provided, verify (optional hardening).
$nonce = $_SERVER['HTTP_X_WP_NONCE'] ?? '';
if ($nonce && wp_verify_nonce($nonce, 'wp_rest')) {
return true;
}
// For public checkout, still allow anonymous.
return true;
}
/**
* Require a valid REST nonce (for admin-only endpoints).
*/
public static function require_wp_nonce(): bool {
$nonce = $_SERVER['HTTP_X_WP_NONCE'] ?? '';
return (bool) wp_verify_nonce($nonce, 'wp_rest');
}
}