@dangao/bun-server 1.7.1 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -21
- package/dist/di/decorators.d.ts +37 -0
- package/dist/di/decorators.d.ts.map +1 -1
- package/dist/di/index.d.ts +1 -1
- package/dist/di/index.d.ts.map +1 -1
- package/dist/di/module-registry.d.ts +17 -0
- package/dist/di/module-registry.d.ts.map +1 -1
- package/dist/events/decorators.d.ts +52 -0
- package/dist/events/decorators.d.ts.map +1 -0
- package/dist/events/event-module.d.ts +97 -0
- package/dist/events/event-module.d.ts.map +1 -0
- package/dist/events/index.d.ts +5 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/service.d.ts +76 -0
- package/dist/events/service.d.ts.map +1 -0
- package/dist/events/types.d.ts +184 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1511 -11
- package/dist/security/filter.d.ts +23 -0
- package/dist/security/filter.d.ts.map +1 -1
- package/dist/security/guards/builtin/auth-guard.d.ts +44 -0
- package/dist/security/guards/builtin/auth-guard.d.ts.map +1 -0
- package/dist/security/guards/builtin/index.d.ts +3 -0
- package/dist/security/guards/builtin/index.d.ts.map +1 -0
- package/dist/security/guards/builtin/roles-guard.d.ts +66 -0
- package/dist/security/guards/builtin/roles-guard.d.ts.map +1 -0
- package/dist/security/guards/decorators.d.ts +50 -0
- package/dist/security/guards/decorators.d.ts.map +1 -0
- package/dist/security/guards/execution-context.d.ts +56 -0
- package/dist/security/guards/execution-context.d.ts.map +1 -0
- package/dist/security/guards/guard-registry.d.ts +67 -0
- package/dist/security/guards/guard-registry.d.ts.map +1 -0
- package/dist/security/guards/index.d.ts +7 -0
- package/dist/security/guards/index.d.ts.map +1 -0
- package/dist/security/guards/reflector.d.ts +57 -0
- package/dist/security/guards/reflector.d.ts.map +1 -0
- package/dist/security/guards/types.d.ts +126 -0
- package/dist/security/guards/types.d.ts.map +1 -0
- package/dist/security/index.d.ts +1 -0
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/security-module.d.ts +20 -0
- package/dist/security/security-module.d.ts.map +1 -1
- package/dist/validation/class-validator.d.ts +108 -0
- package/dist/validation/class-validator.d.ts.map +1 -0
- package/dist/validation/custom-validator.d.ts +130 -0
- package/dist/validation/custom-validator.d.ts.map +1 -0
- package/dist/validation/errors.d.ts +22 -2
- package/dist/validation/errors.d.ts.map +1 -1
- package/dist/validation/index.d.ts +7 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/rules/array.d.ts +33 -0
- package/dist/validation/rules/array.d.ts.map +1 -0
- package/dist/validation/rules/common.d.ts +90 -0
- package/dist/validation/rules/common.d.ts.map +1 -0
- package/dist/validation/rules/conditional.d.ts +30 -0
- package/dist/validation/rules/conditional.d.ts.map +1 -0
- package/dist/validation/rules/index.d.ts +5 -0
- package/dist/validation/rules/index.d.ts.map +1 -0
- package/dist/validation/rules/object.d.ts +30 -0
- package/dist/validation/rules/object.d.ts.map +1 -0
- package/dist/validation/types.d.ts +52 -1
- package/dist/validation/types.d.ts.map +1 -1
- package/docs/events.md +494 -0
- package/docs/guards.md +376 -0
- package/docs/guide.md +309 -1
- package/docs/request-lifecycle.md +444 -0
- package/docs/validation.md +407 -0
- package/docs/zh/events.md +494 -0
- package/docs/zh/guards.md +376 -0
- package/docs/zh/guide.md +309 -1
- package/docs/zh/request-lifecycle.md +444 -0
- package/docs/zh/validation.md +407 -0
- package/package.json +1 -1
- package/src/di/decorators.ts +46 -0
- package/src/di/index.ts +10 -1
- package/src/di/module-registry.ts +39 -0
- package/src/events/decorators.ts +103 -0
- package/src/events/event-module.ts +272 -0
- package/src/events/index.ts +32 -0
- package/src/events/service.ts +352 -0
- package/src/events/types.ts +223 -0
- package/src/index.ts +133 -1
- package/src/security/filter.ts +88 -8
- package/src/security/guards/builtin/auth-guard.ts +68 -0
- package/src/security/guards/builtin/index.ts +3 -0
- package/src/security/guards/builtin/roles-guard.ts +165 -0
- package/src/security/guards/decorators.ts +124 -0
- package/src/security/guards/execution-context.ts +152 -0
- package/src/security/guards/guard-registry.ts +164 -0
- package/src/security/guards/index.ts +7 -0
- package/src/security/guards/reflector.ts +99 -0
- package/src/security/guards/types.ts +144 -0
- package/src/security/index.ts +1 -0
- package/src/security/security-module.ts +72 -2
- package/src/validation/class-validator.ts +322 -0
- package/src/validation/custom-validator.ts +289 -0
- package/src/validation/errors.ts +50 -2
- package/src/validation/index.ts +103 -1
- package/src/validation/rules/array.ts +118 -0
- package/src/validation/rules/common.ts +286 -0
- package/src/validation/rules/conditional.ts +52 -0
- package/src/validation/rules/index.ts +51 -0
- package/src/validation/rules/object.ts +86 -0
- package/src/validation/types.ts +61 -1
- package/tests/auth/auth-decorators.test.ts +241 -0
- package/tests/auth/oauth2-service.test.ts +318 -0
- package/tests/cache/cache-decorators-extended.test.ts +272 -0
- package/tests/cache/cache-interceptors.test.ts +534 -0
- package/tests/cache/cache-service-proxy.test.ts +246 -0
- package/tests/cache/memory-cache-store.test.ts +155 -0
- package/tests/cache/redis-cache-store.test.ts +199 -0
- package/tests/config/config-center-integration.test.ts +334 -0
- package/tests/config/config-module-extended.test.ts +165 -0
- package/tests/controller/param-binder.test.ts +333 -0
- package/tests/di/global-module.test.ts +487 -0
- package/tests/error/error-handler.test.ts +166 -57
- package/tests/error/i18n-extended.test.ts +105 -0
- package/tests/events/event-decorators.test.ts +173 -0
- package/tests/events/event-emitter.test.ts +373 -0
- package/tests/events/event-listener-scanner.test.ts +114 -0
- package/tests/events/event-module.test.ts +204 -0
- package/tests/extensions/logger-module.test.ts +158 -0
- package/tests/files/file-storage.test.ts +136 -0
- package/tests/interceptor/base-interceptor.test.ts +605 -0
- package/tests/interceptor/builtin/cache-interceptor.test.ts +233 -86
- package/tests/interceptor/builtin/log-interceptor.test.ts +469 -0
- package/tests/interceptor/builtin/permission-interceptor.test.ts +219 -120
- package/tests/interceptor/interceptor-chain.test.ts +241 -189
- package/tests/interceptor/interceptor-metadata.test.ts +221 -0
- package/tests/microservice/circuit-breaker.test.ts +221 -0
- package/tests/microservice/service-client-decorators.test.ts +86 -0
- package/tests/microservice/service-client-interceptors.test.ts +274 -0
- package/tests/microservice/service-registry-decorators.test.ts +147 -0
- package/tests/microservice/tracer.test.ts +213 -0
- package/tests/microservice/tracing-collectors.test.ts +168 -0
- package/tests/middleware/builtin/middleware-builtin-extended.test.ts +237 -0
- package/tests/middleware/builtin/rate-limit.test.ts +257 -0
- package/tests/middleware/middleware-decorators.test.ts +222 -0
- package/tests/middleware/middleware-pipeline.test.ts +160 -0
- package/tests/queue/queue-decorators.test.ts +139 -0
- package/tests/queue/queue-service.test.ts +191 -0
- package/tests/request/body-parser-extended.test.ts +291 -0
- package/tests/request/request-wrapper.test.ts +319 -0
- package/tests/router/router-decorators.test.ts +260 -0
- package/tests/router/router-extended.test.ts +298 -0
- package/tests/security/guards/guards-integration.test.ts +371 -0
- package/tests/security/guards/guards.test.ts +775 -0
- package/tests/security/guards/reflector.test.ts +188 -0
- package/tests/security/security-filter.test.ts +182 -0
- package/tests/security/security-module-extended.test.ts +133 -0
- package/tests/security/security-module.test.ts +2 -2
- package/tests/session/memory-session-store.test.ts +172 -0
- package/tests/session/session-decorators.test.ts +163 -0
- package/tests/swagger/ui.test.ts +212 -0
- package/tests/validation/class-validator.test.ts +349 -0
- package/tests/validation/custom-validator.test.ts +335 -0
- package/tests/validation/rules.test.ts +543 -0
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { Context } from '../core/context';
|
|
2
2
|
import type { Middleware } from '../middleware';
|
|
3
|
+
import type { Container } from '../di/container';
|
|
3
4
|
import { AuthenticationManager } from './authentication-manager';
|
|
4
5
|
import { RoleBasedAccessDecisionManager } from './access-decision-manager';
|
|
5
6
|
import type { SecurityConfig } from './types';
|
|
7
|
+
import { GuardRegistry } from './guards/guard-registry';
|
|
8
|
+
import { Reflector } from './guards/reflector';
|
|
6
9
|
/**
|
|
7
10
|
* 安全过滤器配置
|
|
8
11
|
*/
|
|
@@ -19,9 +22,29 @@ export interface SecurityFilterConfig extends SecurityConfig {
|
|
|
19
22
|
* 令牌提取函数
|
|
20
23
|
*/
|
|
21
24
|
extractToken?: (ctx: Context) => string | null;
|
|
25
|
+
/**
|
|
26
|
+
* DI 容器(用于解析守卫)
|
|
27
|
+
*/
|
|
28
|
+
container?: Container;
|
|
29
|
+
/**
|
|
30
|
+
* 守卫注册表
|
|
31
|
+
*/
|
|
32
|
+
guardRegistry?: GuardRegistry;
|
|
22
33
|
}
|
|
23
34
|
/**
|
|
24
35
|
* 创建安全过滤器
|
|
25
36
|
*/
|
|
26
37
|
export declare function createSecurityFilter(config: SecurityFilterConfig): Middleware;
|
|
38
|
+
/**
|
|
39
|
+
* 获取守卫注册表
|
|
40
|
+
* @param container - DI 容器
|
|
41
|
+
* @returns 守卫注册表实例
|
|
42
|
+
*/
|
|
43
|
+
export declare function getGuardRegistry(container: Container): GuardRegistry;
|
|
44
|
+
/**
|
|
45
|
+
* 注册 Reflector 到 DI 容器
|
|
46
|
+
* @param container - DI 容器
|
|
47
|
+
* @returns Reflector 实例
|
|
48
|
+
*/
|
|
49
|
+
export declare function registerReflector(container: Container): Reflector;
|
|
27
50
|
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/security/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/security/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAOrE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAmB,MAAM,oBAAoB,CAAC;AAGhE;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D;;OAEG;IACH,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C;;OAEG;IACH,qBAAqB,CAAC,EAAE,8BAA8B,CAAC;IACvD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,UAAU,CA4I7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,CAOpE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAOjE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { CanActivate, ExecutionContext } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* 认证守卫
|
|
4
|
+
* 检查请求是否已认证
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* @Controller('/api/users')
|
|
8
|
+
* @UseGuards(AuthGuard)
|
|
9
|
+
* class UserController {
|
|
10
|
+
* @GET('/profile')
|
|
11
|
+
* getProfile() {
|
|
12
|
+
* // 只有已认证的用户才能访问
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
export declare class AuthGuard implements CanActivate {
|
|
17
|
+
/**
|
|
18
|
+
* 判断是否允许访问
|
|
19
|
+
* @param context - 执行上下文
|
|
20
|
+
* @returns 如果已认证则返回 true,否则抛出 UnauthorizedException
|
|
21
|
+
*/
|
|
22
|
+
canActivate(context: ExecutionContext): boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 可选认证守卫
|
|
26
|
+
* 如果有 token 则验证,没有 token 也允许访问
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* @GET('/public')
|
|
30
|
+
* @UseGuards(OptionalAuthGuard)
|
|
31
|
+
* publicEndpoint() {
|
|
32
|
+
* // 未认证也可以访问,但如果有 token 会被验证
|
|
33
|
+
* }
|
|
34
|
+
*/
|
|
35
|
+
export declare class OptionalAuthGuard implements CanActivate {
|
|
36
|
+
/**
|
|
37
|
+
* 判断是否允许访问
|
|
38
|
+
* 总是返回 true,但会检查认证状态
|
|
39
|
+
* @param context - 执行上下文
|
|
40
|
+
* @returns 总是返回 true
|
|
41
|
+
*/
|
|
42
|
+
canActivate(context: ExecutionContext): boolean;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=auth-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-guard.d.ts","sourceRoot":"","sources":["../../../../src/security/guards/builtin/auth-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK9D;;;;;;;;;;;;;GAaG;AACH,qBACa,SAAU,YAAW,WAAW;IAC3C;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAavD;AAED;;;;;;;;;;GAUG;AACH,qBACa,iBAAkB,YAAW,WAAW;IACnD;;;;;OAKG;IACI,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAKvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/security/guards/builtin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { CanActivate, ExecutionContext } from '../types';
|
|
2
|
+
import { Reflector } from '../reflector';
|
|
3
|
+
/**
|
|
4
|
+
* 角色守卫
|
|
5
|
+
* 检查用户是否具有所需角色
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* @Controller('/api/admin')
|
|
9
|
+
* @UseGuards(AuthGuard, RolesGuard)
|
|
10
|
+
* class AdminController {
|
|
11
|
+
* @GET('/dashboard')
|
|
12
|
+
* @Roles('admin')
|
|
13
|
+
* dashboard() {
|
|
14
|
+
* // 只有 admin 角色才能访问
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* @GET('/super')
|
|
18
|
+
* @Roles('admin', 'superadmin')
|
|
19
|
+
* superAdmin() {
|
|
20
|
+
* // admin 或 superadmin 角色可以访问
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
*/
|
|
24
|
+
export declare class RolesGuard implements CanActivate {
|
|
25
|
+
private readonly reflector;
|
|
26
|
+
constructor(reflector?: Reflector);
|
|
27
|
+
/**
|
|
28
|
+
* 判断是否允许访问
|
|
29
|
+
* @param context - 执行上下文
|
|
30
|
+
* @returns 如果用户具有所需角色则返回 true
|
|
31
|
+
*/
|
|
32
|
+
canActivate(context: ExecutionContext): boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 创建自定义角色守卫
|
|
36
|
+
* 支持自定义角色验证逻辑
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* const CustomRolesGuard = createRolesGuard({
|
|
40
|
+
* // 所有角色都必须匹配
|
|
41
|
+
* matchAll: true,
|
|
42
|
+
* // 自定义角色获取逻辑
|
|
43
|
+
* getRoles: (context) => {
|
|
44
|
+
* const user = context.switchToHttp().getRequest().auth?.user;
|
|
45
|
+
* return user?.roles || [];
|
|
46
|
+
* },
|
|
47
|
+
* });
|
|
48
|
+
*/
|
|
49
|
+
export interface RolesGuardOptions {
|
|
50
|
+
/**
|
|
51
|
+
* 是否需要匹配所有角色
|
|
52
|
+
* @default false (只需匹配其中一个)
|
|
53
|
+
*/
|
|
54
|
+
matchAll?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 自定义获取用户角色的函数
|
|
57
|
+
*/
|
|
58
|
+
getRoles?: (context: ExecutionContext) => string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 创建自定义角色守卫工厂
|
|
62
|
+
* @param options - 配置选项
|
|
63
|
+
* @returns 自定义角色守卫类
|
|
64
|
+
*/
|
|
65
|
+
export declare function createRolesGuard(options?: RolesGuardOptions): new () => CanActivate;
|
|
66
|
+
//# sourceMappingURL=roles-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles-guard.d.ts","sourceRoot":"","sources":["../../../../src/security/guards/builtin/roles-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK9D,OAAO,EAAE,SAAS,EAAmB,MAAM,cAAc,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAGX,SAAS,CAAC,EAAE,SAAS;IAKhD;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAwCvD;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,EAAE,CAAC;CACpD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,WAAW,CA4CvF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import type { GuardType } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* 守卫装饰器
|
|
5
|
+
* 可用于控制器或方法级别
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* // 控制器级别
|
|
9
|
+
* @Controller('/api/admin')
|
|
10
|
+
* @UseGuards(AuthGuard, RolesGuard)
|
|
11
|
+
* class AdminController {}
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // 方法级别
|
|
15
|
+
* @GET('/profile')
|
|
16
|
+
* @UseGuards(AuthGuard)
|
|
17
|
+
* getProfile() {}
|
|
18
|
+
*
|
|
19
|
+
* @param guards - 守卫类或守卫实例
|
|
20
|
+
* @returns 类或方法装饰器
|
|
21
|
+
*/
|
|
22
|
+
export declare function UseGuards(...guards: GuardType[]): ClassDecorator & MethodDecorator;
|
|
23
|
+
/**
|
|
24
|
+
* 角色装饰器
|
|
25
|
+
* 用于标记需要特定角色的方法或控制器
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* @GET('/admin')
|
|
29
|
+
* @Roles('admin', 'superadmin')
|
|
30
|
+
* adminOnly() {}
|
|
31
|
+
*
|
|
32
|
+
* @param roles - 允许访问的角色列表
|
|
33
|
+
* @returns 类或方法装饰器
|
|
34
|
+
*/
|
|
35
|
+
export declare function Roles(...roles: string[]): ClassDecorator & MethodDecorator;
|
|
36
|
+
/**
|
|
37
|
+
* 获取守卫元数据
|
|
38
|
+
* @param target - 目标对象(类或原型)
|
|
39
|
+
* @param propertyKey - 方法名(可选)
|
|
40
|
+
* @returns 守卫列表
|
|
41
|
+
*/
|
|
42
|
+
export declare function getGuardsMetadata(target: Object | Function, propertyKey?: string | symbol): GuardType[];
|
|
43
|
+
/**
|
|
44
|
+
* 获取角色元数据
|
|
45
|
+
* @param target - 目标对象(类或原型)
|
|
46
|
+
* @param propertyKey - 方法名(可选)
|
|
47
|
+
* @returns 角色列表
|
|
48
|
+
*/
|
|
49
|
+
export declare function getRolesMetadata(target: Object | Function, propertyKey?: string | symbol): string[];
|
|
50
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../../src/security/guards/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CACvB,GAAG,MAAM,EAAE,SAAS,EAAE,GACrB,cAAc,GAAG,eAAe,CA2BlC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CACnB,GAAG,KAAK,EAAE,MAAM,EAAE,GACjB,cAAc,GAAG,eAAe,CAclC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GAAG,QAAQ,EACzB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAC5B,SAAS,EAAE,CAab;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,QAAQ,EACzB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAC5B,MAAM,EAAE,CAKV"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import type { ServerWebSocket } from 'bun';
|
|
3
|
+
import type { Context } from '../../core/context';
|
|
4
|
+
import type { ResponseBuilder } from '../../request/response';
|
|
5
|
+
import type { Constructor } from '../../core/types';
|
|
6
|
+
import type { ExecutionContext, HttpArgumentsHost, WsArgumentsHost } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* 执行上下文实现
|
|
9
|
+
*/
|
|
10
|
+
export declare class ExecutionContextImpl implements ExecutionContext {
|
|
11
|
+
private readonly ctx;
|
|
12
|
+
private readonly controllerClass;
|
|
13
|
+
private readonly methodName;
|
|
14
|
+
private readonly handler;
|
|
15
|
+
private readonly args;
|
|
16
|
+
private readonly httpHost;
|
|
17
|
+
private wsHost?;
|
|
18
|
+
constructor(ctx: Context, controllerClass: Constructor<unknown>, methodName: string, handler: Function, args?: unknown[], responseBuilder?: ResponseBuilder);
|
|
19
|
+
/**
|
|
20
|
+
* 设置 WebSocket 上下文
|
|
21
|
+
* @param client - WebSocket 客户端
|
|
22
|
+
* @param data - 消息数据
|
|
23
|
+
*/
|
|
24
|
+
setWsContext(client: ServerWebSocket<unknown>, data: unknown): void;
|
|
25
|
+
/**
|
|
26
|
+
* 获取 HTTP 上下文
|
|
27
|
+
*/
|
|
28
|
+
switchToHttp(): HttpArgumentsHost;
|
|
29
|
+
/**
|
|
30
|
+
* 获取 WebSocket 上下文
|
|
31
|
+
*/
|
|
32
|
+
switchToWs(): WsArgumentsHost;
|
|
33
|
+
/**
|
|
34
|
+
* 获取当前处理的控制器类
|
|
35
|
+
*/
|
|
36
|
+
getClass(): Constructor<unknown>;
|
|
37
|
+
/**
|
|
38
|
+
* 获取当前处理的方法
|
|
39
|
+
*/
|
|
40
|
+
getHandler(): Function;
|
|
41
|
+
/**
|
|
42
|
+
* 获取方法名
|
|
43
|
+
*/
|
|
44
|
+
getMethodName(): string;
|
|
45
|
+
/**
|
|
46
|
+
* 获取方法或类的元数据
|
|
47
|
+
* @param key - 元数据键
|
|
48
|
+
* @returns 元数据值
|
|
49
|
+
*/
|
|
50
|
+
getMetadata<T>(key: string | symbol): T | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* 获取请求参数
|
|
53
|
+
*/
|
|
54
|
+
getArgs(): unknown[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=execution-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../../src/security/guards/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAC;AAkDjB;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAKzD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IARvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAkB;gBAGd,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,EACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,QAAQ,EACjB,IAAI,GAAE,OAAO,EAAO,EACrC,eAAe,CAAC,EAAE,eAAe;IAKnC;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAI1E;;OAEG;IACI,YAAY,IAAI,iBAAiB;IAIxC;;OAEG;IACI,UAAU,IAAI,eAAe;IAOpC;;OAEG;IACI,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC;IAIvC;;OAEG;IACI,UAAU,IAAI,QAAQ;IAI7B;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;;;OAIG;IACI,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,SAAS;IAe1D;;OAEG;IACI,OAAO,IAAI,OAAO,EAAE;CAG5B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Container } from '../../di/container';
|
|
2
|
+
import type { Constructor } from '../../core/types';
|
|
3
|
+
import type { GuardType, ExecutionContext } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* 守卫注册表
|
|
6
|
+
* 管理全局守卫和执行守卫链
|
|
7
|
+
*/
|
|
8
|
+
export declare class GuardRegistry {
|
|
9
|
+
/**
|
|
10
|
+
* 全局守卫列表
|
|
11
|
+
*/
|
|
12
|
+
private globalGuards;
|
|
13
|
+
/**
|
|
14
|
+
* 守卫实例缓存(用于缓存从 DI 容器解析的守卫实例)
|
|
15
|
+
*/
|
|
16
|
+
private guardInstances;
|
|
17
|
+
/**
|
|
18
|
+
* 注册全局守卫
|
|
19
|
+
* @param guards - 守卫类或实例
|
|
20
|
+
*/
|
|
21
|
+
addGlobalGuards(...guards: GuardType[]): void;
|
|
22
|
+
/**
|
|
23
|
+
* 获取全局守卫
|
|
24
|
+
* @returns 全局守卫列表
|
|
25
|
+
*/
|
|
26
|
+
getGlobalGuards(): GuardType[];
|
|
27
|
+
/**
|
|
28
|
+
* 清除所有全局守卫
|
|
29
|
+
*/
|
|
30
|
+
clearGlobalGuards(): void;
|
|
31
|
+
/**
|
|
32
|
+
* 解析守卫实例
|
|
33
|
+
* @param guard - 守卫类或实例
|
|
34
|
+
* @param container - DI 容器
|
|
35
|
+
* @returns 守卫实例
|
|
36
|
+
*/
|
|
37
|
+
private resolveGuard;
|
|
38
|
+
/**
|
|
39
|
+
* 获取控制器级别的守卫
|
|
40
|
+
* @param controllerClass - 控制器类
|
|
41
|
+
* @returns 守卫列表
|
|
42
|
+
*/
|
|
43
|
+
getControllerGuards(controllerClass: Constructor<unknown>): GuardType[];
|
|
44
|
+
/**
|
|
45
|
+
* 获取方法级别的守卫
|
|
46
|
+
* @param controllerClass - 控制器类
|
|
47
|
+
* @param methodName - 方法名
|
|
48
|
+
* @returns 守卫列表
|
|
49
|
+
*/
|
|
50
|
+
getMethodGuards(controllerClass: Constructor<unknown>, methodName: string): GuardType[];
|
|
51
|
+
/**
|
|
52
|
+
* 收集所有守卫(全局 + 控制器 + 方法)
|
|
53
|
+
* @param controllerClass - 控制器类
|
|
54
|
+
* @param methodName - 方法名
|
|
55
|
+
* @returns 按顺序排列的守卫列表
|
|
56
|
+
*/
|
|
57
|
+
collectGuards(controllerClass: Constructor<unknown>, methodName: string): GuardType[];
|
|
58
|
+
/**
|
|
59
|
+
* 执行守卫链
|
|
60
|
+
* @param context - 执行上下文
|
|
61
|
+
* @param container - DI 容器
|
|
62
|
+
* @returns 是否允许访问
|
|
63
|
+
* @throws ForbiddenException 如果守卫拒绝访问
|
|
64
|
+
*/
|
|
65
|
+
executeGuards(context: ExecutionContext, container: Container): Promise<boolean>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=guard-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-registry.d.ts","sourceRoot":"","sources":["../../../src/security/guards/guard-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAEV,SAAS,EACT,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAKjB;;;GAGG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,YAAY,CAAmB;IAEvC;;OAEG;IACH,OAAO,CAAC,cAAc,CAAoD;IAE1E;;;OAGG;IACI,eAAe,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;IAIpD;;;OAGG;IACI,eAAe,IAAI,SAAS,EAAE;IAIrC;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA8BpB;;;;OAIG;IACI,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE;IAI9E;;;;;OAKG;IACI,eAAe,CACpB,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,EACrC,UAAU,EAAE,MAAM,GACjB,SAAS,EAAE;IAId;;;;;OAKG;IACI,aAAa,CAClB,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,EACrC,UAAU,EAAE,MAAM,GACjB,SAAS,EAAE;IASd;;;;;;OAMG;IACU,aAAa,CACxB,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,CAAC;CA0BpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/security/guards/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import type { Constructor } from '../../core/types';
|
|
3
|
+
/**
|
|
4
|
+
* Reflector 工具类
|
|
5
|
+
* 用于获取类和方法的元数据
|
|
6
|
+
*/
|
|
7
|
+
export declare class Reflector {
|
|
8
|
+
/**
|
|
9
|
+
* 获取元数据
|
|
10
|
+
* 优先从方法获取,如果方法没有则从类获取
|
|
11
|
+
*
|
|
12
|
+
* @param metadataKey - 元数据键
|
|
13
|
+
* @param target - 目标类或方法
|
|
14
|
+
* @returns 元数据值
|
|
15
|
+
*/
|
|
16
|
+
get<T>(metadataKey: string | symbol, target: Function | Object): T | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* 从类获取元数据
|
|
19
|
+
* @param metadataKey - 元数据键
|
|
20
|
+
* @param target - 目标类
|
|
21
|
+
* @returns 元数据值
|
|
22
|
+
*/
|
|
23
|
+
getFromClass<T>(metadataKey: string | symbol, target: Constructor<unknown>): T | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* 从方法获取元数据
|
|
26
|
+
* @param metadataKey - 元数据键
|
|
27
|
+
* @param target - 目标类原型
|
|
28
|
+
* @param propertyKey - 方法名
|
|
29
|
+
* @returns 元数据值
|
|
30
|
+
*/
|
|
31
|
+
getFromMethod<T>(metadataKey: string | symbol, target: Object, propertyKey: string | symbol): T | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* 获取元数据(支持合并类和方法的元数据)
|
|
34
|
+
* 对于数组类型,将类和方法的元数据合并
|
|
35
|
+
*
|
|
36
|
+
* @param metadataKey - 元数据键
|
|
37
|
+
* @param target - 目标类
|
|
38
|
+
* @param propertyKey - 方法名
|
|
39
|
+
* @returns 合并后的元数据值
|
|
40
|
+
*/
|
|
41
|
+
getAllAndMerge<T extends unknown[]>(metadataKey: string | symbol, target: Constructor<unknown>, propertyKey: string | symbol): T;
|
|
42
|
+
/**
|
|
43
|
+
* 获取元数据(方法优先)
|
|
44
|
+
* 如果方法有元数据则返回方法的,否则返回类的
|
|
45
|
+
*
|
|
46
|
+
* @param metadataKey - 元数据键
|
|
47
|
+
* @param target - 目标类
|
|
48
|
+
* @param propertyKey - 方法名
|
|
49
|
+
* @returns 元数据值
|
|
50
|
+
*/
|
|
51
|
+
getAllAndOverride<T>(metadataKey: string | symbol, target: Constructor<unknown>, propertyKey: string | symbol): T | undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reflector Token
|
|
55
|
+
*/
|
|
56
|
+
export declare const REFLECTOR_TOKEN: unique symbol;
|
|
57
|
+
//# sourceMappingURL=reflector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflector.d.ts","sourceRoot":"","sources":["../../../src/security/guards/reflector.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,qBAAa,SAAS;IACpB;;;;;;;OAOG;IACI,GAAG,CAAC,CAAC,EACV,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,EAAE,QAAQ,GAAG,MAAM,GACxB,CAAC,GAAG,SAAS;IAIhB;;;;;OAKG;IACI,YAAY,CAAC,CAAC,EACnB,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAC3B,CAAC,GAAG,SAAS;IAIhB;;;;;;OAMG;IACI,aAAa,CAAC,CAAC,EACpB,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,CAAC,GAAG,SAAS;IAIhB;;;;;;;;OAQG;IACI,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,EACvC,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAC5B,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,CAAC;IAQJ;;;;;;;;OAQG;IACI,iBAAiB,CAAC,CAAC,EACxB,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAC5B,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,CAAC,GAAG,SAAS;CAOjB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,eAAyC,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { Context } from '../../core/context';
|
|
2
|
+
import type { ResponseBuilder } from '../../request/response';
|
|
3
|
+
import type { Constructor } from '../../core/types';
|
|
4
|
+
import type { ServerWebSocket } from 'bun';
|
|
5
|
+
/**
|
|
6
|
+
* 守卫接口
|
|
7
|
+
* 守卫用于决定请求是否可以继续执行
|
|
8
|
+
*/
|
|
9
|
+
export interface CanActivate {
|
|
10
|
+
/**
|
|
11
|
+
* 判断是否允许访问
|
|
12
|
+
* @param context - 执行上下文
|
|
13
|
+
* @returns 是否允许访问,可以是同步或异步的布尔值
|
|
14
|
+
*/
|
|
15
|
+
canActivate(context: ExecutionContext): boolean | Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* HTTP 参数主机接口
|
|
19
|
+
* 提供 HTTP 请求相关的上下文信息
|
|
20
|
+
*/
|
|
21
|
+
export interface HttpArgumentsHost {
|
|
22
|
+
/**
|
|
23
|
+
* 获取请求上下文
|
|
24
|
+
* @returns Context 对象
|
|
25
|
+
*/
|
|
26
|
+
getRequest(): Context;
|
|
27
|
+
/**
|
|
28
|
+
* 获取响应构建器
|
|
29
|
+
* @returns ResponseBuilder 对象(可能为 undefined)
|
|
30
|
+
*/
|
|
31
|
+
getResponse(): ResponseBuilder | undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* WebSocket 参数主机接口
|
|
35
|
+
* 提供 WebSocket 连接相关的上下文信息
|
|
36
|
+
*/
|
|
37
|
+
export interface WsArgumentsHost {
|
|
38
|
+
/**
|
|
39
|
+
* 获取 WebSocket 客户端
|
|
40
|
+
* @returns WebSocket 连接对象
|
|
41
|
+
*/
|
|
42
|
+
getClient(): ServerWebSocket<unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* 获取消息数据
|
|
45
|
+
* @returns 消息数据
|
|
46
|
+
*/
|
|
47
|
+
getData(): unknown;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 执行上下文接口
|
|
51
|
+
* 提供请求处理过程中的上下文信息
|
|
52
|
+
*/
|
|
53
|
+
export interface ExecutionContext {
|
|
54
|
+
/**
|
|
55
|
+
* 获取 HTTP 上下文
|
|
56
|
+
* @returns HTTP 参数主机
|
|
57
|
+
*/
|
|
58
|
+
switchToHttp(): HttpArgumentsHost;
|
|
59
|
+
/**
|
|
60
|
+
* 获取 WebSocket 上下文
|
|
61
|
+
* @returns WebSocket 参数主机
|
|
62
|
+
*/
|
|
63
|
+
switchToWs(): WsArgumentsHost;
|
|
64
|
+
/**
|
|
65
|
+
* 获取当前处理的控制器类
|
|
66
|
+
* @returns 控制器类构造函数
|
|
67
|
+
*/
|
|
68
|
+
getClass(): Constructor<unknown>;
|
|
69
|
+
/**
|
|
70
|
+
* 获取当前处理的方法
|
|
71
|
+
* @returns 方法函数
|
|
72
|
+
*/
|
|
73
|
+
getHandler(): Function;
|
|
74
|
+
/**
|
|
75
|
+
* 获取方法名
|
|
76
|
+
* @returns 方法名字符串
|
|
77
|
+
*/
|
|
78
|
+
getMethodName(): string;
|
|
79
|
+
/**
|
|
80
|
+
* 获取方法或类的元数据
|
|
81
|
+
* @param key - 元数据键
|
|
82
|
+
* @returns 元数据值,如果不存在则返回 undefined
|
|
83
|
+
*/
|
|
84
|
+
getMetadata<T>(key: string | symbol): T | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* 获取请求参数
|
|
87
|
+
* @returns 请求参数数组
|
|
88
|
+
*/
|
|
89
|
+
getArgs(): unknown[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 守卫类型:可以是守卫类构造函数或守卫实例
|
|
93
|
+
*/
|
|
94
|
+
export type GuardType = Constructor<CanActivate> | CanActivate;
|
|
95
|
+
/**
|
|
96
|
+
* 守卫元数据
|
|
97
|
+
*/
|
|
98
|
+
export interface GuardMetadata {
|
|
99
|
+
/**
|
|
100
|
+
* 守卫列表
|
|
101
|
+
*/
|
|
102
|
+
guards: GuardType[];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 守卫配置选项
|
|
106
|
+
*/
|
|
107
|
+
export interface GuardOptions {
|
|
108
|
+
/**
|
|
109
|
+
* 是否跳过全局守卫
|
|
110
|
+
* @default false
|
|
111
|
+
*/
|
|
112
|
+
skipGlobalGuards?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 守卫元数据键
|
|
116
|
+
*/
|
|
117
|
+
export declare const GUARDS_METADATA_KEY: unique symbol;
|
|
118
|
+
/**
|
|
119
|
+
* 守卫注册表 Token
|
|
120
|
+
*/
|
|
121
|
+
export declare const GUARD_REGISTRY_TOKEN: unique symbol;
|
|
122
|
+
/**
|
|
123
|
+
* Roles 元数据键
|
|
124
|
+
*/
|
|
125
|
+
export declare const ROLES_METADATA_KEY: unique symbol;
|
|
126
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/security/guards/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpE;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC;IAEtB;;;OAGG;IACH,WAAW,IAAI,eAAe,GAAG,SAAS,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAEtC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,IAAI,iBAAiB,CAAC;IAElC;;;OAGG;IACH,UAAU,IAAI,eAAe,CAAC;IAE9B;;;OAGG;IACH,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAEjC;;;OAGG;IACH,UAAU,IAAI,QAAQ,CAAC;IAEvB;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAEpD;;;OAGG;IACH,OAAO,IAAI,OAAO,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,eAAsC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAA8C,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,kBAAkB,eAAqC,CAAC"}
|
package/dist/security/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { JWTConfig, OAuth2Client, UserInfo } from '../auth/types';
|
|
2
|
+
import type { GuardType } from './guards/types';
|
|
3
|
+
import { GuardRegistry } from './guards/guard-registry';
|
|
2
4
|
/**
|
|
3
5
|
* 安全模块配置
|
|
4
6
|
*/
|
|
@@ -36,6 +38,10 @@ export interface SecurityModuleConfig {
|
|
|
36
38
|
* @default false
|
|
37
39
|
*/
|
|
38
40
|
defaultAuthRequired?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* 全局守卫列表
|
|
43
|
+
*/
|
|
44
|
+
globalGuards?: GuardType[];
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
41
47
|
* 安全模块
|
|
@@ -46,5 +52,19 @@ export declare class SecurityModule {
|
|
|
46
52
|
* @param config - 模块配置
|
|
47
53
|
*/
|
|
48
54
|
static forRoot(config: SecurityModuleConfig): typeof SecurityModule;
|
|
55
|
+
/**
|
|
56
|
+
* 获取守卫注册表
|
|
57
|
+
* @returns 守卫注册表实例
|
|
58
|
+
*/
|
|
59
|
+
static getGuardRegistry(): GuardRegistry | null;
|
|
60
|
+
/**
|
|
61
|
+
* 添加全局守卫
|
|
62
|
+
* @param guards - 守卫类或实例
|
|
63
|
+
*/
|
|
64
|
+
static addGlobalGuards(...guards: GuardType[]): void;
|
|
65
|
+
/**
|
|
66
|
+
* 重置模块状态(主要用于测试)
|
|
67
|
+
*/
|
|
68
|
+
static reset(): void;
|
|
49
69
|
}
|
|
50
70
|
//# sourceMappingURL=security-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security-module.d.ts","sourceRoot":"","sources":["../../src/security/security-module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"security-module.d.ts","sourceRoot":"","sources":["../../src/security/security-module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,GAAG,EAAE,SAAS,CAAC;IACf;;OAEG;IACH,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;KACpD,CAAC;IACF;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AAOD;;GAEG;AACH,qBAKa,cAAc;IACzB;;;OAGG;WACW,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,cAAc;IA6G1E;;;OAGG;WACW,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAItD;;;OAGG;WACW,eAAe,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;IAM3D;;OAEG;WACW,KAAK,IAAI,IAAI;CAQ5B"}
|