44 lines
1.1 KiB
TypeScript
Executable File
44 lines
1.1 KiB
TypeScript
Executable File
import { policies } from '#policies/main'
|
|
import * as abilities from '#abilities/main'
|
|
|
|
import { Bouncer } from '@adonisjs/bouncer'
|
|
import type { HttpContext } from '@adonisjs/core/http'
|
|
import type { NextFn } from '@adonisjs/core/types/http'
|
|
|
|
/**
|
|
* Init bouncer middleware is used to create a bouncer instance
|
|
* during an HTTP request
|
|
*/
|
|
export default class InitializeBouncerMiddleware {
|
|
async handle(ctx: HttpContext, next: NextFn) {
|
|
/**
|
|
* Create bouncer instance for the ongoing HTTP request.
|
|
* We will pull the user from the HTTP context.
|
|
*/
|
|
ctx.bouncer = new Bouncer(
|
|
() => ctx.auth.user || null,
|
|
abilities,
|
|
policies
|
|
).setContainerResolver(ctx.containerResolver)
|
|
|
|
/**
|
|
* Share bouncer helpers with Edge templates.
|
|
*/
|
|
// if ('view' in ctx) {
|
|
// ctx.view?.share(ctx.bouncer.edgeHelpers)
|
|
// }
|
|
|
|
return next()
|
|
}
|
|
}
|
|
|
|
declare module '@adonisjs/core/http' {
|
|
export interface HttpContext {
|
|
bouncer: Bouncer<
|
|
Exclude<HttpContext['auth']['user'], undefined>,
|
|
typeof abilities,
|
|
typeof policies
|
|
>
|
|
}
|
|
}
|