WIP - permissions
This commit is contained in:
24
backend/src/auth/middleware/ability.middleware.ts
Normal file
24
backend/src/auth/middleware/ability.middleware.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { Injectable, NestMiddleware, Inject } from '@nestjs/common';
|
||||
import { Request, Response, NextFunction } from 'express';
|
||||
import { AbilityFactory } from '../ability.factory';
|
||||
import { Knex } from 'knex';
|
||||
|
||||
/**
|
||||
* Middleware to build and attach CASL ability to request
|
||||
* Must run after authentication middleware
|
||||
*/
|
||||
@Injectable()
|
||||
export class AbilityMiddleware implements NestMiddleware {
|
||||
constructor(
|
||||
private readonly abilityFactory: AbilityFactory,
|
||||
@Inject('KnexConnection') private readonly knex: Knex,
|
||||
) {}
|
||||
|
||||
async use(req: Request & { user?: any; ability?: any }, res: Response, next: NextFunction) {
|
||||
if (req.user) {
|
||||
// Build ability for authenticated user
|
||||
req.ability = await this.abilityFactory.buildForUser(req.user, this.knex);
|
||||
}
|
||||
next();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user