3.3 KiB
3.3 KiB
Final Implementation Plan for Hashkey/Payload URL Encoding System
Understanding the Requirement
Based on your clarification:
- Current navigation pattern:
navigate({ page: 'EditUser', props: { target_user: hashkey } }) - URL format should be:
/page-name--h:HASHKEYor/page-name--e:PAYLOAD - Hashkeys are passed as values (not prop names)
- Encrypted payloads needed for sensitive data
- Universal resolver - same mechanism for users, products, stores, etc.
Revised Implementation Plan
1. Frontend - New Composables
File: resources/js/composables/useUrlArgument.js
export function useUrlArgument() {
// Extract hashkey/payload from URL path segments
// Parse format like "/edituser--h:HASHKEY" or "/product--e:ENCODED_PAYLOAD"
// Return: { slug, type, hashkey, payload }
}
File: resources/js/composables/useUrlEncoder.js
export function useUrlEncoder() {
const encodeHash = (hashkey) => `h:${hashkey}`;
const encodePayload = (payload) => `e:${base64Encode(JSON.stringify(payload))}`;
// Returns URL-friendly encoded strings
}
2. Frontend - Updated useNavigate
Modify existing resources/js/composables/Core/useNavigate.js to:
- Detect hashkey/payload in props and encode them into URL
- Support format:
/page-name--h:HASHKEYor/page-name--e:PAYLOAD - Maintain backward compatibility with current navigation
- Extract from current URL on page load
3. Backend - PHP Helpers
File: app/Support/RouteArgumentParser.php
class RouteArgumentParser {
public function parseArgument($argument)
// Parse format: "page-name--h:HASHKEY" or "page-name--e:ENCODED_PAYLOAD"
// Returns structured data for the resource
}
File: app/Support/HashkeyResolver.php
class HashkeyResolver {
public function resolveByHashkey($hashkey, $modelClass)
// Generic resolver that accepts any model class (User, Product, Store, etc.)
}
4. Backend - Middleware
File: app/Middleware/DecodeRouteArgumentMiddleware.php
class DecodeRouteArgumentMiddleware {
public function handle($request, Closure $next)
// Automatically parses URL arguments and attaches to request
// Makes decoded data available as $request->decodedRoute
}
URL Format Examples
- User route:
/edituser--h:USER_HASHKEY123 - Product route:
/product/edit--h:PRODUCT_HASH456 - Store route:
/store/view--h:STORE_HASH789 - Payload route (encrypted):
/data/review--e:ENCODED_PAYLOAD
Current Navigation to URL Mapping
| Current Nav | New URL Format |
|---|---|
navigate({ page: 'EditUser', props: { target_user: hashkey } }) |
/edituser--h:HASHKEY |
Migration Strategy
- Phase 1: Composables - Create
useUrlArgument.jsanduseUrlEncoder.js - Phase 2: Frontend Integration - Update
useNavigate.js - Phase 3: Backend Parsing - Create PHP helpers
- Phase 4: Middleware - Add middleware for automatic parsing
- Phase 5: Testing - Verify navigation works with both old and new formats
Key Features
- ✅ Backward compatible (existing navigation still works)
- ✅ Universal hashkey resolver for all resource types
- ✅ Encrypted payload support for sensitive data
- ✅ Standard URL format across all routes