1.0.7 • Published 2 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();
}
}