X Enterprises
fastify-xauth-better

requireRole(roles)

Returns a preHandler that enforces global user role membership.

requireRole(roles)

Returns a preHandler middleware that checks request.user.role against an allowed-roles list. Responds with 403 Forbidden if the user's global role is not in the list. Must be preceded by requireAuth() (or a global prefix) so that request.user is already populated.

Signature

instance.requireRole(
  roles: string | string[]
): (request: FastifyRequest, reply: FastifyReply) => Promise<void>

Params

NameTypeRequiredDescription
rolesstring | string[]YesOne or more allowed global role values (matched against User.role)

Returns

A preHandler function to pass to a route's preHandler option.

Throws

  • 401 Unauthorizedrequest.user is not set (auth middleware not applied first)
  • 403 Forbidden — user's role is not in the allowed list

Examples

Single role

const adminAuth = fastify.xauthbetter.get("admin");

fastify.get("/api/admin/dashboard", {
  preHandler: [adminAuth.requireRole("admin")],
}, async (request) => {
  return { user: request.user };
});

Multiple allowed roles

fastify.delete("/api/admin/users/:id", {
  preHandler: [
    adminAuth.requireAuth(),
    adminAuth.requireRole(["admin", "superadmin"]),
  ],
}, async (request) => {
  return { deleted: request.params.id };
});

See also

AI Context

package: "@xenterprises/fastify-xauth-better"
method: fastify.xauthbetter.get(name).requireRole(roles)
use-when: Fastify preHandler factory that enforces global user role — returns 403 if user lacks the required role
usage: { preHandler: [auth.requireAuth(), auth.requireRole(['admin'])] }
Copyright © 2026