Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
5.3 KiB
Plaintext
1 line
5.3 KiB
Plaintext
{"version":3,"sources":["../../src/utilities/getFieldPermissions.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n SanitizedDocumentPermissions,\n SanitizedFieldPermissions,\n SanitizedFieldsPermissions,\n} from '../auth/types.js'\nimport type { ClientField, Field } from '../fields/config/types.js'\nimport type { Operation } from '../types/index.js'\n\n/**\n * Gets read and operation-level permissions for a given field based on cascading field permissions.\n * @returns An object with the following properties:\n * - `operation`: Whether the user has permission to perform the operation on the field (`create` or `update`).\n * - `permissions`: The field-level permissions.\n * - `read`: Whether the user has permission to read the field.\n */\nexport const getFieldPermissions = ({\n collectionPermissions,\n field,\n operation,\n parentName,\n permissions,\n}: {\n readonly collectionPermissions?: SanitizedDocumentPermissions\n readonly field: ClientField | Field\n readonly operation: Operation\n readonly parentName: string\n readonly permissions: SanitizedFieldPermissions | SanitizedFieldsPermissions\n}): {\n operation: boolean\n /**\n * The field-level permissions. This can be equal to the permissions passed to the\n * `getFieldPermissions` function if the field has no name.\n */\n permissions: SanitizedFieldPermissions | SanitizedFieldsPermissions\n read: boolean\n} => {\n // First, calculate permissions using the existing logic\n const fieldOperation =\n permissions === true ||\n permissions?.[operation as keyof typeof permissions] === true ||\n permissions?.[parentName as keyof typeof permissions] === true ||\n ('name' in field &&\n typeof permissions === 'object' &&\n permissions?.[field.name as keyof typeof permissions] &&\n (permissions[field.name as keyof typeof permissions] === true ||\n (operation in (permissions as any)[field.name] &&\n (permissions as any)[field.name][operation])))\n\n const fieldPermissions =\n permissions === undefined || permissions === null || permissions === true\n ? true\n : 'name' in field\n ? (permissions as any)[field.name]\n : permissions\n\n const fieldRead =\n permissions === true ||\n permissions?.read === true ||\n permissions?.[parentName as keyof typeof permissions] === true ||\n ('name' in field &&\n typeof permissions === 'object' &&\n permissions?.[field.name as keyof typeof permissions] &&\n ((permissions as any)[field.name] === true ||\n ('read' in (permissions as any)[field.name] && (permissions as any)[field.name].read)))\n\n // Check if field permissions are effectively empty/missing\n const hasFieldPermissions =\n permissions === true ||\n (typeof permissions === 'object' && permissions !== null && Object.keys(permissions).length > 0)\n\n // If no field permissions are defined, fallback to collection permissions\n if (!hasFieldPermissions && collectionPermissions) {\n const collectionRead = Boolean(collectionPermissions.read)\n let collectionOperation = false\n\n // Check operation-specific permission on collection\n if (operation === 'create' && 'create' in collectionPermissions) {\n collectionOperation = Boolean(collectionPermissions.create)\n } else if (operation === 'update') {\n collectionOperation = Boolean(collectionPermissions.update)\n }\n\n return {\n operation: collectionOperation,\n permissions: { read: collectionRead } as SanitizedFieldPermissions,\n read: collectionRead,\n }\n }\n\n // Return the calculated permissions\n return {\n operation: Boolean(fieldOperation),\n permissions: fieldPermissions,\n read: Boolean(fieldRead),\n }\n}\n"],"names":["getFieldPermissions","collectionPermissions","field","operation","parentName","permissions","fieldOperation","name","fieldPermissions","undefined","fieldRead","read","hasFieldPermissions","Object","keys","length","collectionRead","Boolean","collectionOperation","create","update"],"mappings":"AAAA,qDAAqD,GASrD;;;;;;CAMC,GACD,OAAO,MAAMA,sBAAsB,CAAC,EAClCC,qBAAqB,EACrBC,KAAK,EACLC,SAAS,EACTC,UAAU,EACVC,WAAW,EAOZ;IASC,wDAAwD;IACxD,MAAMC,iBACJD,gBAAgB,QAChBA,aAAa,CAACF,UAAsC,KAAK,QACzDE,aAAa,CAACD,WAAuC,KAAK,QACzD,UAAUF,SACT,OAAOG,gBAAgB,YACvBA,aAAa,CAACH,MAAMK,IAAI,CAA6B,IACpDF,CAAAA,WAAW,CAACH,MAAMK,IAAI,CAA6B,KAAK,QACtDJ,aAAa,AAACE,WAAmB,CAACH,MAAMK,IAAI,CAAC,IAC5C,AAACF,WAAmB,CAACH,MAAMK,IAAI,CAAC,CAACJ,UAAU;IAEnD,MAAMK,mBACJH,gBAAgBI,aAAaJ,gBAAgB,QAAQA,gBAAgB,OACjE,OACA,UAAUH,QACR,AAACG,WAAmB,CAACH,MAAMK,IAAI,CAAC,GAChCF;IAER,MAAMK,YACJL,gBAAgB,QAChBA,aAAaM,SAAS,QACtBN,aAAa,CAACD,WAAuC,KAAK,QACzD,UAAUF,SACT,OAAOG,gBAAgB,YACvBA,aAAa,CAACH,MAAMK,IAAI,CAA6B,IACpD,CAAA,AAACF,WAAmB,CAACH,MAAMK,IAAI,CAAC,KAAK,QACnC,UAAU,AAACF,WAAmB,CAACH,MAAMK,IAAI,CAAC,IAAI,AAACF,WAAmB,CAACH,MAAMK,IAAI,CAAC,CAACI,IAAI;IAE1F,2DAA2D;IAC3D,MAAMC,sBACJP,gBAAgB,QACf,OAAOA,gBAAgB,YAAYA,gBAAgB,QAAQQ,OAAOC,IAAI,CAACT,aAAaU,MAAM,GAAG;IAEhG,0EAA0E;IAC1E,IAAI,CAACH,uBAAuBX,uBAAuB;QACjD,MAAMe,iBAAiBC,QAAQhB,sBAAsBU,IAAI;QACzD,IAAIO,sBAAsB;QAE1B,oDAAoD;QACpD,IAAIf,cAAc,YAAY,YAAYF,uBAAuB;YAC/DiB,sBAAsBD,QAAQhB,sBAAsBkB,MAAM;QAC5D,OAAO,IAAIhB,cAAc,UAAU;YACjCe,sBAAsBD,QAAQhB,sBAAsBmB,MAAM;QAC5D;QAEA,OAAO;YACLjB,WAAWe;YACXb,aAAa;gBAAEM,MAAMK;YAAe;YACpCL,MAAMK;QACR;IACF;IAEA,oCAAoC;IACpC,OAAO;QACLb,WAAWc,QAAQX;QACnBD,aAAaG;QACbG,MAAMM,QAAQP;IAChB;AACF,EAAC"} |