Skip to content

Node PermissionsRole & Permission Management

Easy-to-use permissions system for Node.js, Express and NestJS - inspired by Spatie Laravel Permission

Node Permissions

Quick Example

typescript
import { Entity, BaseEntity, PrimaryGeneratedColumn } from 'typeorm';
import { 
  HasRoles, 
  setup, 
  getPermissionService, 
  Role, 
  Permission 
} from '@wagner-labs/node-permissions';
import { AppDataSource } from './data-source'; // Your TypeORM DataSource

// 1. Initialize the package in your app's entry point
setup(
  AppDataSource.getRepository(Permission),
  AppDataSource.getRepository(Role)
);

// 2. Add the HasRoles mixin to your User entity
@Entity()
export class User extends HasRoles(BaseEntity) {
  @PrimaryGeneratedColumn()
  id: number;
  // ... other user columns
}

// 3. Use the service to create roles and permissions
const permissionService = getPermissionService();
await permissionService.createRole('editor');
await permissionService.givePermissionsToRole('editor', 'edit-articles');

// 4. Use the expressive API on user instances
const user = new User(); // assuming you create/fetch a user
await user.assignRole('editor');

// 5. Check permissions in your app's logic
console.log(user.can('edit-articles')); // true

Protect Routes

Express

typescript
import { hasRole, hasPermission } from '@wagner-labs/node-permissions';

app.get('/admin', hasRole('admin'), (req, res) => {
  res.json({ message: 'Admin area' });
});

app.post('/articles', hasPermission('create-articles'), (req, res) => {
  res.json({ message: 'Article created' });
});

NestJS

typescript
import { RolesGuard, Roles, Permissions } from '@wagner-labs/node-permissions';

@Controller('articles')
@UseGuards(RolesGuard)
export class ArticlesController {
  @Get()
  @Roles('admin', 'editor')
  findAll() {
    return 'Protected by roles';
  }

  @Post()
  @Permissions('create-articles')
  create() {
    return 'Protected by permissions';
  }
}

Released under the MIT License.