1
0
Fork 0

feat(admin): hide compose settings and API keys from non-superusers

This commit is contained in:
Jason Fraley 2026-09-22 14:52:48 -04:00
parent 239e95c462
commit 529a9573b2

View file

@ -82,12 +82,14 @@ import { CustomMinefieldScores } from "@/collections/minigames/CustomMinefieldSc
import { CustomRadioTests } from "@/collections/minigames/CustomRadioTests"; import { CustomRadioTests } from "@/collections/minigames/CustomRadioTests";
import { CustomRadioTestScores } from "@/collections/minigames/CustomRadioTestScores"; import { CustomRadioTestScores } from "@/collections/minigames/CustomRadioTestScores";
import { RibbonSubmissions } from "@/collections/users/RibbonSubmissions"; import { RibbonSubmissions } from "@/collections/users/RibbonSubmissions";
import hasRoles from "@/utils/access-control/hasRoles";
import { scopedAdminPageAccess } from "@/utils/access-control/divisionAccess"; import { scopedAdminPageAccess } from "@/utils/access-control/divisionAccess";
import { payloadAiPlugin, PayloadAiPluginLexicalEditorFeature } from "@ai-stack/payloadcms"; import { payloadAiPlugin, PayloadAiPluginLexicalEditorFeature } from "@ai-stack/payloadcms";
import type { SeedPromptFunction } from "@ai-stack/payloadcms/types"; import type { SeedPromptFunction } from "@ai-stack/payloadcms/types";
import { mcpPlugin } from "@payloadcms/plugin-mcp"; import { mcpPlugin } from "@payloadcms/plugin-mcp";
import { createOpenAI } from "@ai-sdk/openai"; import { createOpenAI } from "@ai-sdk/openai";
import { createTextStreamResponse, jsonSchema, streamObject } from "ai"; import { createTextStreamResponse, jsonSchema, streamObject } from "ai";
import type { User } from "@/payload-types";
const unslothProvider = createOpenAI({ const unslothProvider = createOpenAI({
apiKey: process.env.UNSLOTH_API_KEY, apiKey: process.env.UNSLOTH_API_KEY,
@ -449,7 +451,23 @@ export default buildConfig({
plugins: [ plugins: [
// payloadCloudPlugin(), // payloadCloudPlugin(),
// storage-adapter-placeholder // storage-adapter-placeholder
mcpPlugin({ collections: mcpCollections }), mcpPlugin({
collections: mcpCollections,
overrideApiKeyCollection: (collection) => ({
...collection,
admin: {
...collection.admin,
hidden: ({ user }) => !hasRoles(["admin", "developer"], user as User),
},
access: {
...collection.access,
read: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
update: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
create: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
delete: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
},
}),
}),
payloadAiPlugin({ payloadAiPlugin({
seedPrompts: aiFieldSeedPrompts, seedPrompts: aiFieldSeedPrompts,
collections: { collections: {
@ -515,6 +533,17 @@ export default buildConfig({
[Labels.slug]: true, [Labels.slug]: true,
}, },
debugging: true, debugging: true,
overrideInstructions: {
admin: {
hidden: ({ user }) => !hasRoles(["admin", "developer"], user as User),
},
access: {
read: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
update: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
create: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
delete: ({ req }) => hasRoles(["admin", "developer"], req.user as User),
},
},
generationModels: [ generationModels: [
{ {
id: "unsloth-text", id: "unsloth-text",