better-auth
Version:
The most comprehensive authentication framework for TypeScript.
1 lines • 1.61 kB
Source Map (JSON)
{"version":3,"file":"has-permission.mjs","names":[],"sources":["../../../src/plugins/admin/has-permission.ts"],"sourcesContent":["import { defaultRoles } from \"./access\";\nimport type { AdminOptions } from \"./types\";\n\ntype PermissionExclusive =\n\t| {\n\t\t\t/**\n\t\t\t * @deprecated Use `permissions` instead\n\t\t\t */\n\t\t\tpermission: { [key: string]: string[] };\n\t\t\tpermissions?: never | undefined;\n\t }\n\t| {\n\t\t\tpermissions: { [key: string]: string[] };\n\t\t\tpermission?: never | undefined;\n\t };\n\nexport const hasPermission = (\n\tinput: {\n\t\tuserId?: string | undefined;\n\t\trole?: string | undefined;\n\t\toptions?: AdminOptions | undefined;\n\t} & PermissionExclusive,\n) => {\n\tif (input.userId && input.options?.adminUserIds?.includes(input.userId)) {\n\t\treturn true;\n\t}\n\tif (!input.permissions && !input.permission) {\n\t\treturn false;\n\t}\n\tconst roles = (input.role || input.options?.defaultRole || \"user\").split(\",\");\n\tconst acRoles = input.options?.roles || defaultRoles;\n\tfor (const role of roles) {\n\t\tconst _role = acRoles[role as keyof typeof acRoles];\n\t\tconst result = _role?.authorize(input.permission ?? input.permissions);\n\t\tif (result?.success) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n"],"mappings":";;;;AAgBA,MAAa,iBACZ,UAKI;AACJ,KAAI,MAAM,UAAU,MAAM,SAAS,cAAc,SAAS,MAAM,OAAO,CACtE,QAAO;AAER,KAAI,CAAC,MAAM,eAAe,CAAC,MAAM,WAChC,QAAO;CAER,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,eAAe,QAAQ,MAAM,IAAI;CAC7E,MAAM,UAAU,MAAM,SAAS,SAAS;AACxC,MAAK,MAAM,QAAQ,MAGlB,MAFc,QAAQ,OACA,UAAU,MAAM,cAAc,MAAM,YAAY,GAC1D,QACX,QAAO;AAGT,QAAO"}