1.0.7 • Published 4 years ago
@aipeli/midway-casbin v1.0.7
简介
基于MidwayJS封装了Node环境最强大的权限管理工具casbin,主要是增加了MidwayAdapter类使casbin与MidwayJS适配,并将常的功能封装在MidwayCasbin类中,包括casbin原生的函数,以及自定的函数(如:updateGroupingPolicy函数)只需要一次Inject``MidwayCasbin便可使用跟casbin一样的功能,但是MidwayCasbin类中并没有完全封装完casbin原生的函数,如有需要可再更新。
使用方法
安装
npm install @aipeli/midway-casbin -save主应用配置
// # src/configuration.ts
import * as casbin from '@aipeli/midway-casbin';
@Configuration({
imports: [
casbin
],
importConfigs: [join(__dirname, './config')],
})配置ORM
// #src/config/config.default.ts
orm: {
type: 'mysql',
host: '127.0.0.1',
port: 3306,
username: 'root',
password: 'root',
database: 'midway_crud',
synchronize: true, // 是否同步表
logging: false,
}配置Midway-Casbin
// #src/config/config.ts
import { MidwayConfig } from '@midwayjs/core';
export default {
casbin: {
moduleFile: 'rbac_model.conf'
},
} as MidwayConfig;配置Casbin Model文件
# src/config/rbac_model.conf
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act || r.sub == 'vben'使用MidwayCasbin操作
# src/modules/shop/controller/admin/midwayCasbin.ts
import { MidwayCasbin } from '@aipeli/midway-casbin';
import { Get, Inject, Controller } from '@midwayjs/decorator';
@Controller('/casbin')
export class ShopAdminCasbinController {
@Inject()
midwayCasbin: MidwayCasbin;
@Get('/getPolicy')
async getPolicy() {
return await this.midwayCasbin.getPolicy();
}
}使用MidwayAdapter操作
import { MidwayAdapter } from '@aipeli/midway-casbin';
import { App, Controller, Get, Inject } from '@midwayjs/decorator';
import { Enforcer, newEnforcer } from 'casbin';
import * as path from 'path';
@Controller('/casbin')
export class ShopAdminCasbinController {
@App()
app;
@Inject()
midwayAdapter: MidwayAdapter;
casbinEnforcer: Enforcer;
@Get('/getPolicy')
async getPolicy() {
const casbinModel = path.join(this.app.getBaseDir(), '/config/rbac_model.conf');
this.casbinEnforcer = await newEnforcer(casbinModel, this.midwayAdapter);
await this.casbinEnforcer.loadPolicy();
return await this.casbinEnforcer.getPolicy();
}
}