IMPORTANT NOTICE: This module only works with Monggose or File Adapter at the moment
This modules integrates the Casbin into a NestJS Application.
npm install --save @switchit/nestjs-casbin # or yarn install @switchit/nestjs-casbin
Import the CasbinModule into the root AppModule.
//app.module.ts import { Module } from '@nestjs/common'; import { CasbinModule } from '@switchit/nestjs-casbin'; @Module({ imports: [ CasbinModule.forRoot({ model: __dirname + '/model/rbac-model.conf', // Change this adapter: { url: 'mongodb://localhost:27017/casbin', // Change this options: { useNewUrlParser: true, useCreateIndex: true } } }), ], }) export class AppModule {}
The module can also works with static policy files in CSV format:
//app.module.ts import { Module } from '@nestjs/common'; import { CasbinModule } from '@switchit/nestjs-casbin'; @Module({ imports: [ CasbinModule.forRoot({ model: __dirname + '/model/rbac-model.conf', // Change this adapter: __dirname + '/model/policy.csv', // Change this }), ], }) export class AppModule {}
Of course you can use an async configuration:
//app.module.ts import { Module } from '@nestjs/common'; import { CasbinModule } from '@switchit/nestjs-casbin'; @Module({ imports: [ CasbinModule.forRootAsync({ useFactory: () => ({ model: __dirname + '/model/rbac-model.conf', // Change this adapter: { url: 'mongodb://localhost:27017/casbin', // Change this options: { useNewUrlParser: true, useCreateIndex: true } } }) }), ], }) export class AppModule {}
If you need you have 2 decorators that can be used to retrieve the Casbin Enforcer and the Casbin Adapter: @InjectEnforcer() and @InjectAdapter().
@Injectable() export class MyService { constructor( @InjectEnforcer() private readonly enforcer: Enforcer ) {} async doSomething() { // Uses the enforcer await this.enforcer.addGroupingPolicy(command.userId, 'owner', command.organizationId); } }