wip: add custom /sexy/models endpoint to bypass permissions

- 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 <noreply@anthropic.com>
This commit is contained in:
Valknar XXX
2025-10-28 11:04:34 +01:00
parent 3f38633863
commit 0b08ce5900
2 changed files with 33 additions and 9 deletions

View File

@@ -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;

View File

@@ -351,10 +351,9 @@ export async function getModels(fetch?: typeof globalThis.fetch) {
return loggedApiCall("getModels", async () => {
const directus = getDirectusInstance(fetch);
return directus.request<Model[]>(
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<Model[]>(
readUsers({
fields: ["*"],
filter: { _and: [modelFilter, { featured: { _eq: true } }] },
sort: ["-join_date"],
limit,
customEndpoint({
method: "GET",
path: `/sexy/models?featured=true&limit=${limit}`,
}),
);
},