🔐
Complete Permission System
Manage roles and permissions with an intuitive API similar to Laravel's Spatie package
Easy-to-use permissions system for Node.js, Express and NestJS - inspired by Spatie Laravel Permission
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')); // trueimport { 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' });
});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';
}
}