{"version":3,"file":"has-access.mjs","names":[],"sources":["../../../src/libs/permission/has-access.ts"],"sourcesContent":["import type { LucidAuth, Permission } from \"../../types.js\";\n\n/**\n * Checks if the user has the access based on permissions and resource ownership.\n */\nconst hasAccess = (params: {\n\t/** The user to check the access for, if not provided, the access will be denied */\n\tuser?: LucidAuth;\n\t/** The permissions that must all be present */\n\trequiredPermissions?: Permission[];\n\t/** The permissions where at least one must be present */\n\toptionalPermissions?: Permission[];\n\t/** If provided, users can access their own resources regardless of permissions */\n\tresourceOwnerId?: number;\n}): boolean => {\n\tif (!params.user) return false;\n\tif (params.user?.superAdmin) return true;\n\tif (params.resourceOwnerId && params.user?.id === params.resourceOwnerId)\n\t\treturn true;\n\tif (params.user?.permissions === undefined) return false;\n\n\tconst requiredPermissions = params.requiredPermissions ?? [];\n\tconst optionalPermissions = params.optionalPermissions ?? [];\n\n\tconst hasAllRequired = requiredPermissions.every((p) =>\n\t\tparams.user?.permissions?.includes(p),\n\t);\n\tif (!hasAllRequired) return false;\n\n\tif (optionalPermissions.length === 0) return hasAllRequired;\n\n\treturn optionalPermissions.some((p) => params.user?.permissions?.includes(p));\n};\n\nexport default hasAccess;\n"],"mappings":"AAKA,MAAM,EAAa,GASJ,CACd,GAAI,CAAC,EAAO,KAAM,MAAO,GAEzB,GADI,EAAO,MAAM,YACb,EAAO,iBAAmB,EAAO,MAAM,KAAO,EAAO,gBACxD,MAAO,GACR,GAAI,EAAO,MAAM,cAAgB,IAAA,GAAW,MAAO,GAEnD,IAAM,EAAsB,EAAO,qBAAuB,CAAC,EACrD,EAAsB,EAAO,qBAAuB,CAAC,EAErD,EAAiB,EAAoB,MAAO,GACjD,EAAO,MAAM,aAAa,SAAS,CAAC,CACrC,EAKA,OAJK,EAED,EAAoB,SAAW,EAAU,EAEtC,EAAoB,KAAM,GAAM,EAAO,MAAM,aAAa,SAAS,CAAC,CAAC,EAJhD,EAK7B"}