UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 2.77 kB
{"version":3,"file":"collection-permissions.mjs","names":[],"sources":["../../../../src/libs/http/middleware/collection-permissions.ts"],"sourcesContent":["import { createMiddleware } from \"hono/factory\";\nimport type { LucidHonoContext } from \"../../../types/hono.js\";\nimport { LucidAPIError } from \"../../../utils/errors/index.js\";\nimport { copy } from \"../../i18n/index.js\";\nimport { resolveCollectionPermission } from \"../../permission/collection-permissions.js\";\nimport hasAccess from \"../../permission/has-access.js\";\nimport type { CollectionPermissionAction } from \"../../permission/types.js\";\n\n/**\n * Guards collection document routes with the generated permission for the\n * requested collection.\n */\nconst collectionPermissions = (\n\taction: CollectionPermissionAction,\n\toptions?: {\n\t\tgetCollectionKey?: (c: LucidHonoContext) => string | undefined;\n\t},\n) =>\n\tcreateMiddleware(async (c: LucidHonoContext, next) => {\n\t\tconst collectionKey =\n\t\t\toptions?.getCollectionKey?.(c) ||\n\t\t\tc.req.param(\"collectionKey\") ||\n\t\t\tc.req.param(\"key\");\n\t\tconst collection = c\n\t\t\t.get(\"config\")\n\t\t\t.collections.find((item) => item.key === collectionKey);\n\n\t\tif (!collection) {\n\t\t\tthrow new LucidAPIError({\n\t\t\t\ttype: \"basic\",\n\t\t\t\tname: copy(\"server:core.collections.permission.error.name\"),\n\t\t\t\tmessage: copy(\"server:core.collections.not.found.message\"),\n\t\t\t\tstatus: 404,\n\t\t\t});\n\t\t}\n\n\t\tconst permission = resolveCollectionPermission({\n\t\t\tcollection,\n\t\t\taction,\n\t\t});\n\n\t\tconst access = hasAccess({\n\t\t\tuser: c.get(\"auth\"),\n\t\t\trequiredPermissions: [permission],\n\t\t});\n\t\tif (!access) {\n\t\t\tthrow new LucidAPIError({\n\t\t\t\ttype: \"basic\",\n\t\t\t\tname: copy(\"server:core.collections.permission.error.name\"),\n\t\t\t\tmessage: copy(\"server:core.collections.permission.error.message\", {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcollection: collection.key,\n\t\t\t\t\t\taction,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tstatus: 403,\n\t\t\t});\n\t\t}\n\n\t\treturn await next();\n\t});\n\nexport default collectionPermissions;\n"],"mappings":"6RAYA,MAAM,GACL,EACA,IAIA,EAAiB,MAAO,EAAqB,IAAS,CACrD,IAAM,EACL,GAAS,mBAAmB,CAAC,GAC7B,EAAE,IAAI,MAAM,eAAe,GAC3B,EAAE,IAAI,MAAM,KAAK,EACZ,EAAa,EACjB,IAAI,QAAQ,CAAC,CACb,YAAY,KAAM,GAAS,EAAK,MAAQ,CAAa,EAEvD,GAAI,CAAC,EACJ,MAAM,IAAI,EAAc,CACvB,KAAM,QACN,KAAM,EAAK,+CAA+C,EAC1D,QAAS,EAAK,2CAA2C,EACzD,OAAQ,GACT,CAAC,EAGF,IAAM,EAAa,EAA4B,CAC9C,aACA,QACD,CAAC,EAMD,GAAI,CAJW,EAAU,CACxB,KAAM,EAAE,IAAI,MAAM,EAClB,oBAAqB,CAAC,CAAU,CACjC,CACU,EACT,MAAM,IAAI,EAAc,CACvB,KAAM,QACN,KAAM,EAAK,+CAA+C,EAC1D,QAAS,EAAK,mDAAoD,CACjE,KAAM,CACL,WAAY,EAAW,IACvB,QACD,CACD,CAAC,EACD,OAAQ,GACT,CAAC,EAGF,OAAO,MAAM,EAAK,CACnB,CAAC"}