1.0.7 • Published 2 years ago

@aipeli/midway-casbin v1.0.7

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

v2-cda38a28a515c5017cbb41675fa28546_1440w.jpg

简介

基于MidwayJS封装了Node环境最强大的权限管理工具casbin,主要是增加了MidwayAdapter类使casbinMidwayJS适配,并将常的功能封装在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();
  }
}

点击查看最新文档

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.0

2 years ago