v3.6.0 包含一个重大的 重构,我们将 @midwayjs/decorator 包和 @midwayjs/core 包的内容进行了整合,未来所有的 decorator 相关的内容,都会由 @midwayjs/core 导出,@midwayjs/decorator 包仅做代理,保持功能兼容。 后续,我们将会在文档上进行 decorator 包的移除操作,在这段时间中,大家还是会看到 decorator 和 core 并存的情况。
Features
1、守卫
从 v3.6.0 版本开始,我们提供了守卫能力,和 middleare,filter 类似,也是一个全框架复用的能力(koa/egg/grpc/rabbitmq/bull 等)
import { IMiddleware, Guard, IGuard } from '@midwayjs/core';
import { Context } from '@midwayjs/koa';
@Guard()
export class AuthGuard implements IGuard<Context> {
async canActivate(context: Context, suppilerClz, methodName: string): Promise<boolean> {
// ...
}
}
更多细节请查看 文档。
2、鉴权
基于守卫功能的完成,我们可以自己定义 @Role 装饰器来完成简单的角色鉴权,同时我们也封装了 casbin 这一在社区较为通用的鉴权组件,方便大家使用。
比如,通过装饰器鉴权。
import { Controller, Get, UseGuard } from '@midwayjs/decorator';
import { AuthActionVerb, AuthGuard, AuthPossession, UsePermission } from '@midwayjs/casbin';
import { Resource } from './resouce';
@Controller('/')
export class HomeController {
@UseGuard(AuthGuard)
@UsePermission({
action: AuthActionVerb.READ,
resource: Resource.USER_ROLES,
possession: AuthPossession.ANY
})
@Get('/users')
async findAllUsers() {
// ...
}
}
casbin 组件目前实现了 redis 和 typeorm 两个可以复用的适配器供大家选择,如有其他需求,可以额外进行适配。
更多细节,可以查看 文档。
3、bull 组件
我们新增了 bull 组件用于替代原有的 task 组件。
// invoke
const testQueue = this.bullFramework.getQueue('test');
// 立即执行这个任务
await testQueue?.runJob({
aaa: 1,
bbb: 2,
});
同时也提供了一个 bull-board 组件用于管理。
更多细节,可以查看 文档。
更多介绍可以查看我们的 b 站视频