From 0b08ce5900418afd3078e103ce36d8d7c8e5b719 Mon Sep 17 00:00:00 2001 From: Valknar XXX Date: Tue, 28 Oct 2025 11:04:34 +0100 Subject: [PATCH] wip: add custom /sexy/models endpoint to bypass permissions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add /sexy/models endpoint in bundle with accountability: null - Update getModels() and getFeaturedModels() to use custom endpoint - Still experiencing permissions issues with field access - Need to configure Directus public role permissions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- packages/bundle/src/endpoint/index.ts | 27 +++++++++++++++++++++++++++ packages/frontend/src/lib/services.ts | 15 ++++++--------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/packages/bundle/src/endpoint/index.ts b/packages/bundle/src/endpoint/index.ts index d5fcff0..34073d0 100644 --- a/packages/bundle/src/endpoint/index.ts +++ b/packages/bundle/src/endpoint/index.ts @@ -58,6 +58,33 @@ export default { }); }); + // GET /sexy/models - Public endpoint to fetch models (bypasses permissions) + router.get("/models", async (req, res) => { + try { + const { featured, limit } = req.query; + const usersService = new ItemsService("directus_users", { + schema: await getSchema(), + accountability: null, + }); + + const filter: any = createPolicyFilter("Model"); + if (featured === "true") { + filter._and = [filter, { featured: { _eq: true } }]; + } + + const models = await usersService.readByQuery({ + filter, + fields: ["*", "photos.directus_files_id.*", "banner.*"], + sort: ["-id"], + limit: limit ? parseInt(limit as string) : -1, + }); + + res.json(models); + } catch (error: any) { + res.status(500).json({ error: error.message || "Failed to fetch models" }); + } + }); + // GET /sexy/recordings - List user's recordings router.get("/recordings", async (req, res) => { const accountability = req.accountability; diff --git a/packages/frontend/src/lib/services.ts b/packages/frontend/src/lib/services.ts index f1a4269..fd42e38 100644 --- a/packages/frontend/src/lib/services.ts +++ b/packages/frontend/src/lib/services.ts @@ -351,10 +351,9 @@ export async function getModels(fetch?: typeof globalThis.fetch) { return loggedApiCall("getModels", async () => { const directus = getDirectusInstance(fetch); return directus.request( - readUsers({ - fields: ["*"], - filter: modelFilter, - sort: ["-join_date"], + customEndpoint({ + method: "GET", + path: "/sexy/models", }), ); }); @@ -369,11 +368,9 @@ export async function getFeaturedModels( async () => { const directus = getDirectusInstance(fetch); return directus.request( - readUsers({ - fields: ["*"], - filter: { _and: [modelFilter, { featured: { _eq: true } }] }, - sort: ["-join_date"], - limit, + customEndpoint({ + method: "GET", + path: `/sexy/models?featured=true&limit=${limit}`, }), ); },