diff --git a/.cspell/custom-words.txt b/.cspell/custom-words.txt index 98b878f21c..479e492de9 100644 --- a/.cspell/custom-words.txt +++ b/.cspell/custom-words.txt @@ -12,5 +12,4 @@ merch prefs uncompromised myapp -Neue -unconfigured \ No newline at end of file +Neue \ No newline at end of file diff --git a/packages/better-auth/src/plugins/admin/admin.test.ts b/packages/better-auth/src/plugins/admin/admin.test.ts index 26c3851f83..7c80d74243 100644 --- a/packages/better-auth/src/plugins/admin/admin.test.ts +++ b/packages/better-auth/src/plugins/admin/admin.test.ts @@ -1309,7 +1309,7 @@ describe("access control", async (it) => { it("should throw error when assigning unconfigured admin roles", async () => { expect(() => admin({ - adminRoles: ["admin", "non-existent-role"], + adminRoles: ["non-existent-role"], }), ).toThrowError(BetterAuthError); }); diff --git a/packages/better-auth/src/plugins/admin/admin.ts b/packages/better-auth/src/plugins/admin/admin.ts index 2b315fb0cd..22475561e2 100644 --- a/packages/better-auth/src/plugins/admin/admin.ts +++ b/packages/better-auth/src/plugins/admin/admin.ts @@ -40,18 +40,21 @@ export const admin = (options?: O | undefined) => { ...options, }; - if ( - options?.adminRoles && - (Array.isArray(options.adminRoles) + if (options?.adminRoles) { + const adminRoles = Array.isArray(options.adminRoles) ? options.adminRoles - : [...options.adminRoles.split(",")] - ).some((role) => - Object.keys(options?.roles || defaultRoles).includes(role.toLowerCase()), - ) - ) { - throw new BetterAuthError( - "You cannot assign unconfigured roles as admin roles. Please check your `adminRoles` and `roles` configuration.", + : [...options.adminRoles.split(",")]; + const invalidRoles = adminRoles.filter( + (role) => + !Object.keys(options?.roles || defaultRoles) + .map((r) => r.toLowerCase()) + .includes(role.toLowerCase()), ); + if (invalidRoles.length > 0) { + throw new BetterAuthError( + `Invalid admin roles: ${invalidRoles.join(", ")}. Admin roles must be defined in the 'roles' configuration.`, + ); + } } return {