UNPKG

@lucidcms/core

Version:

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

1 lines 4.63 kB
{"version":3,"file":"registry.mjs","names":[],"sources":["../../../src/libs/permission/registry.ts"],"sourcesContent":["import type { Config } from \"../../types/config.js\";\nimport { tenantAccessAllowed } from \"../../utils/helpers/index.js\";\nimport { copy } from \"../i18n/index.js\";\nimport {\n\tcollectionPermissionActions,\n\tgetCollectionPermission,\n} from \"./collection-permissions.js\";\nimport { PermissionGroups, Permissions } from \"./definitions.js\";\nimport type {\n\tPermission,\n\tPermissionDefinition,\n\tPermissionGroup,\n\tStaticPermission,\n} from \"./types.js\";\n\nexport const corePermissionKeys = Object.values(\n\tPermissions,\n) as StaticPermission[];\n\nconst collectionPermissionRegex =\n\t/^documents:[a-z0-9-_]+:(read|create|update|delete|restore|publish|review)$/;\n\n/** Checks whether a permission is owned and generated by Lucid. */\nexport const isCorePermission = (\n\tpermission: string,\n): permission is Permission => {\n\treturn (\n\t\tcorePermissionKeys.includes(permission as StaticPermission) ||\n\t\tcollectionPermissionRegex.test(permission)\n\t);\n};\n\nconst collectionPermissionDetails = {\n\tread: copy(\"admin:permissions.documents.read\"),\n\tcreate: copy(\"admin:permissions.documents.create\"),\n\tupdate: copy(\"admin:permissions.documents.update\"),\n\tdelete: copy(\"admin:permissions.documents.delete\"),\n\trestore: copy(\"admin:permissions.documents.restore\"),\n\tpublish: copy(\"admin:permissions.documents.publish\"),\n\treview: copy(\"admin:permissions.documents.review\"),\n} as const;\n\nconst getCollectionPermissionGroups = (\n\tconfig?: Pick<Config, \"collections\">,\n\ttenantKey?: string | null,\n): PermissionGroup[] => {\n\treturn (config?.collections ?? [])\n\t\t.filter(\n\t\t\t(collection) =>\n\t\t\t\ttenantKey === undefined ||\n\t\t\t\ttenantAccessAllowed(collection.getData.tenants, tenantKey),\n\t\t)\n\t\t.map((collection) => ({\n\t\t\tkey: `documents:${collection.key}`,\n\t\t\tdetails: {\n\t\t\t\tname: collection.getData.details.name,\n\t\t\t},\n\t\t\tcore: true,\n\t\t\tpermissions: collectionPermissionActions.map(\n\t\t\t\t(action): PermissionDefinition => ({\n\t\t\t\t\tkey: getCollectionPermission(collection.key, action),\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tname: collectionPermissionDetails[action],\n\t\t\t\t\t},\n\t\t\t\t\tcore: true,\n\t\t\t\t}),\n\t\t\t),\n\t\t}));\n};\n\n/** Builds the internal and collection-generated permission catalogue. */\nexport const getPermissionRegistry = (\n\tconfig?: Pick<Config, \"collections\">,\n\toptions?: { tenantKey?: string | null },\n): PermissionGroup[] => {\n\tconst coreGroups = Object.values(PermissionGroups).map<PermissionGroup>(\n\t\t(group) => ({\n\t\t\t...group,\n\t\t\tpermissions: [...group.permissions],\n\t\t}),\n\t);\n\n\treturn [\n\t\t...coreGroups,\n\t\t...getCollectionPermissionGroups(config, options?.tenantKey),\n\t];\n};\n\n/** Builds the permission catalogue shown in role management. */\nexport const getGrantablePermissionRegistry = (\n\tconfig?: Pick<Config, \"collections\">,\n\toptions?: { tenantKey?: string | null },\n) => getPermissionRegistry(config, options);\n\n/** Flattens the permission registry into keys for role validation and sync. */\nexport const getValidPermissions = (\n\tconfig?: Pick<Config, \"collections\">,\n): Permission[] => {\n\treturn getPermissionRegistry(config).flatMap((group) =>\n\t\tgroup.permissions.map((permission) => permission.key),\n\t);\n};\n\n/** Verifies that a permission exists in the current internal catalogue. */\nexport const isRegisteredPermission = (\n\tconfig: Pick<Config, \"collections\">,\n\tpermission: string,\n): permission is Permission => {\n\treturn getValidPermissions(config).includes(permission as Permission);\n};\n"],"mappings":"4RAeA,MAAa,EAAqB,OAAO,OACxC,CACD,EAEM,EACL,6EAGY,EACZ,GAGC,EAAmB,SAAS,CAA8B,GAC1D,EAA0B,KAAK,CAAU,EAIrC,EAA8B,CACnC,KAAM,EAAK,kCAAkC,EAC7C,OAAQ,EAAK,oCAAoC,EACjD,OAAQ,EAAK,oCAAoC,EACjD,OAAQ,EAAK,oCAAoC,EACjD,QAAS,EAAK,qCAAqC,EACnD,QAAS,EAAK,qCAAqC,EACnD,OAAQ,EAAK,oCAAoC,CAClD,EAEM,GACL,EACA,KAEQ,GAAQ,aAAe,CAAC,EAAA,CAC9B,OACC,GACA,IAAc,IAAA,IACd,EAAoB,EAAW,QAAQ,QAAS,CAAS,CAC3D,CAAC,CACA,IAAK,IAAgB,CACrB,IAAK,aAAa,EAAW,MAC7B,QAAS,CACR,KAAM,EAAW,QAAQ,QAAQ,IAClC,EACA,KAAM,GACN,YAAa,EAA4B,IACvC,IAAkC,CAClC,IAAK,EAAwB,EAAW,IAAK,CAAM,EACnD,QAAS,CACR,KAAM,EAA4B,EACnC,EACA,KAAM,EACP,EACD,CACD,EAAE,EAIS,GACZ,EACA,IASO,CACN,GARkB,OAAO,OAAO,CAAgB,CAAC,CAAC,IACjD,IAAW,CACX,GAAG,EACH,YAAa,CAAC,GAAG,EAAM,WAAW,CACnC,EAIY,EACZ,GAAG,EAA8B,EAAQ,GAAS,SAAS,CAC5D,EAIY,GACZ,EACA,IACI,EAAsB,EAAQ,CAAO,EAG7B,EACZ,GAEO,EAAsB,CAAM,CAAC,CAAC,QAAS,GAC7C,EAAM,YAAY,IAAK,GAAe,EAAW,GAAG,CACrD"}