Overview

Mark routes with required roles. Works with RolesGuard for authorization.

Features

  • Role enum included
  • Single role requirement
  • Multiple roles (OR logic)
  • All roles (AND logic)

Installation

npx hanma add roles --framework nest

Code

import { SetMetadata } from "@nestjs/common";

export const ROLES_KEY = "roles";

export enum Role {
  USER = "user",
  ADMIN = "admin",
  MODERATOR = "moderator",
  SUPER_ADMIN = "super_admin",
}

/**
 * Decorator to specify which roles can access a route.
 * Must be used with RolesGuard.
 * 
 * Usage:
 * @Roles(Role.ADMIN)
 * @Get("admin-only")
 * adminRoute() {}
 * 
 * // Multiple roles (OR logic - any role grants access)
 * @Roles(Role.ADMIN, Role.MODERATOR)
 * @Get("staff-only")
 * staffRoute() {}
 */
export const Roles = (...roles: Role[]) => SetMetadata(ROLES_KEY, roles);

/**
 * Decorator requiring ALL specified roles (AND logic).
 */
export const ROLES_ALL_KEY = "roles_all";
export const RolesAll = (...roles: Role[]) => SetMetadata(ROLES_ALL_KEY, roles);

Usage

@Roles(Role.ADMIN)
@Get('admin')
adminRoute() {}

Dependencies

No external dependencies required.

Frequently Asked Questions

How do I install Roles Decorator?
Run the following command: npx hanma add roles --framework nest
How do I use this snippet?
Copy the code and paste it into your project. The snippet will be saved to src/decorators/roles.decorator.ts.
Can I customize this snippet?
Yes! All snippets are copy-paste code that you own. Feel free to modify them to fit your needs.
Does this work with other frameworks?
This snippet is designed for the specific framework. Check the other framework pages for equivalent implementations.