@hugo.ye/common 1.0.133 → 1.0.135

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.
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAkB,KAAK,gBAAgB,EAAyB,MAAM,gBAAgB,CAAC;AAEhH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAA4B,MAAM,MAAM,CAAC;AAC5D,qBAAa,YAAa,YAAW,WAAW;IAGlB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAH9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAEb,WAAW,EAAE,WAAW,EAC9C,SAAS,EAAE,SAAS;IAEzC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CA4B3F"}
1
+ {"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAkB,KAAK,gBAAgB,EAAyB,MAAM,gBAAgB,CAAC;AAEhH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAA4B,MAAM,MAAM,CAAC;AAgB5D,qBAAa,YAAa,YAAW,WAAW;IAGlB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAH9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAEb,WAAW,EAAE,WAAW,EAC9C,SAAS,EAAE,SAAS;IAEzC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CA6B3F"}
@@ -12,10 +12,21 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  };
13
13
  var JwtAuthGuard_1;
14
14
  import { Logger, Inject, UnauthorizedException } from '@nestjs/common';
15
- import { AUTH_PATTERN, AUTH_SERVICE, RoleEntity } from '../index.js';
15
+ import { AUTH_PATTERN, AUTH_SERVICE, flattenNestedPermissions, RoleEntity, UserEntity } from '../index.js';
16
16
  import { ClientProxy } from '@nestjs/microservices';
17
17
  import { Reflector } from '@nestjs/core';
18
18
  import { Observable, tap, map, of, catchError } from 'rxjs';
19
+ const checkUserPermission = (user, accessPermissions) => {
20
+ const userPermissions = user.roles?.map((role) => role.permissions?.map((permission) => ({ [permission.action]: true })));
21
+ const access = userPermissions
22
+ ? flattenNestedPermissions(userPermissions)
23
+ : {};
24
+ for (const permission of accessPermissions) {
25
+ if (access[permission])
26
+ return true;
27
+ }
28
+ throw new UnauthorizedException('权限不足');
29
+ };
19
30
  let JwtAuthGuard = JwtAuthGuard_1 = class JwtAuthGuard {
20
31
  clientProxy;
21
32
  reflector;
@@ -34,12 +45,13 @@ let JwtAuthGuard = JwtAuthGuard_1 = class JwtAuthGuard {
34
45
  authentication: jwt
35
46
  }).pipe(tap((res) => {
36
47
  if (roles) {
37
- for (const role of roles) {
38
- if (!res.roles?.map((role) => role.name).includes(role)) {
39
- this.logger.error('The user does not valid role');
40
- throw new UnauthorizedException('The user does not valid role');
41
- }
42
- }
48
+ // for (const role of roles) {
49
+ // if (!res.roles?.map((role: RoleEntity) => role.name).includes(role)) {
50
+ // this.logger.error('The user does not valid role');
51
+ // throw new UnauthorizedException('The user does not valid role')
52
+ // }
53
+ // }
54
+ return checkUserPermission(res, roles);
43
55
  }
44
56
  context.switchToHttp().getRequest().user = res;
45
57
  }), map(() => true), catchError((err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/auth/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,EAAyB,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5D,IAAa,YAAY,oBAAzB,MAAa,YAAY;IAGsB;IACtB;IAHJ,MAAM,GAAG,IAAI,MAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;IACxD,YAC2C,WAAwB,EAC9C,SAAoB;QADE,gBAAW,GAAX,WAAW,CAAa;QAC9C,cAAS,GAAT,SAAS,CAAW;IACrC,CAAC;IACL,WAAW,CAAC,OAAyB;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;QACvE,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAE7I,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE;YACvC,cAAc,EAAE,GAAG;SACtB,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACR,IAAI,KAAK,EAAE,CAAC;gBACR,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;wBAClD,MAAM,IAAI,qBAAqB,CAAC,8BAA8B,CAAC,CAAA;oBACnE,CAAC;gBACL,CAAC;YACL,CAAC;YACD,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC;QACnD,CAAC,CAAC,EACF,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACf,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CACL,CAAA;IACL,CAAC;CACJ,CAAA;AAlCY,YAAY;IAGhB,WAAA,MAAM,CAAC,YAAY,CAAC,CAAA;qCAA+B,WAAW;QACnC,SAAS;GAJhC,YAAY,CAkCxB"}
1
+ {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/auth/jwt-auth.guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const VerifyAccess: (...dataOrPipes: (string[] | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
2
+ //# sourceMappingURL=access.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/access.decorator.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,2LAqBxB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { SetMetadata, createParamDecorator, UnauthorizedException, } from '@nestjs/common';
2
+ import { flattenNestedPermissions, RoleEntity } from '../index.js';
3
+ // export const Visitor = (...permissions: string[]) => SetMetadata('permissions', permissions);
4
+ export const VerifyAccess = createParamDecorator((accessPermissions, context) => {
5
+ const user = context.getType() === 'http'
6
+ ? context.switchToHttp().getRequest().user
7
+ : context.getArgs()[2].req.headers?.user
8
+ ? JSON.parse(context.getArgs()[2].req.headers?.user)
9
+ : null;
10
+ if (user) {
11
+ const userPermissions = user.roles?.map((role) => role.permissions?.map((permission) => ({ [permission.action]: true })));
12
+ const access = userPermissions ? flattenNestedPermissions(userPermissions) : {};
13
+ for (const permission of accessPermissions) {
14
+ if (access[permission])
15
+ return true;
16
+ }
17
+ throw new UnauthorizedException('权限不足');
18
+ }
19
+ else {
20
+ throw new UnauthorizedException('请先登陆');
21
+ }
22
+ });
23
+ //# sourceMappingURL=access.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.decorator.js","sourceRoot":"","sources":["../../src/decorators/access.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnE,gGAAgG;AAEhG,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAC9C,CAAC,iBAA2B,EAAE,OAAyB,EAAW,EAAE;IAClE,MAAM,IAAI,GACR,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM;QAC1B,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,IAAI;QAC1C,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI;YACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;YACpD,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAgB,EAAE,EAAE,CAC3D,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CACvE,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtC,CAAC;QACD,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC,CACF,CAAC"}
@@ -3,4 +3,5 @@ export * from './role.decorator.ts';
3
3
  export * from './gql-current-user.decorator.ts';
4
4
  export * from './current-member.decorato.ts';
5
5
  export * from './gql-current-member.decorator.ts';
6
+ export * from './access.decorator.ts';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC"}
@@ -3,4 +3,5 @@ export * from "./role.decorator.js";
3
3
  export * from "./gql-current-user.decorator.js";
4
4
  export * from "./current-member.decorato.js";
5
5
  export * from "./gql-current-member.decorator.js";
6
+ export * from "./access.decorator.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC"}
@@ -2,4 +2,5 @@ export * from './order.ts';
2
2
  export * from './expired.ts';
3
3
  export * from './response.ts';
4
4
  export * from './security.ts';
5
+ export * from './tool.ts';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
@@ -2,4 +2,5 @@ export * from "./order.js";
2
2
  export * from "./expired.js";
3
3
  export * from "./response.js";
4
4
  export * from "./security.js";
5
+ export * from "./tool.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { UserEntity } from '../models/index.js';
2
+ export declare const isNumeric: (value: unknown) => boolean;
3
+ export declare const convertToNumber: <T>(input: T) => T;
4
+ export declare const merge: <T>(sort?: "asc" | "desc" | "none", ...args: T[][] | [T[][]]) => T[];
5
+ export declare function arrayRemoveByValue<T>(arr: T[], value: T): T[];
6
+ export declare function arrayRemoveByKey<T, K extends keyof T>(arr: T[], key: K, value: T[K]): T[];
7
+ export declare function arrayRemoveByIndex<T>(arr: T[], index: number): T[];
8
+ export declare const mergeObjects: (...objects: Record<string, any>[]) => Record<string, any>;
9
+ export declare const flattenIndexedObject: (items: Record<string, boolean>[] | Record<string, Record<string, boolean>>) => Record<string, boolean>;
10
+ export declare const flattenNestedPermissions: (nestedPermissions: (Record<string, boolean>[] | undefined)[]) => Record<string, boolean>;
11
+ export declare const checkUserPermission: (user: UserEntity, accessPermissions: string[]) => boolean;
12
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/utils/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,OAK1C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CA0B7C,CAAC;AAiBF,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM,EAC9B,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KACvB,CAAC,EAeH,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAE7D;AASD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACnD,GAAG,EAAE,CAAC,EAAE,EACR,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GACV,CAAC,EAAE,CAEL;AAID,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAElE;AASD,eAAO,MAAM,YAAY,GACvB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAChC,MAAM,CAAC,MAAM,EAAE,GAAG,CAEpB,CAAC;AAUF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACzE,MAAM,CAAC,MAAM,EAAE,OAAO,CAcxB,CAAC;AASF,eAAO,MAAM,wBAAwB,GACnC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,KAC3D,MAAM,CAAC,MAAM,EAAE,OAAO,CAKxB,CAAC;AAGF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,UAAU,EAChB,mBAAmB,MAAM,EAAE,YAY5B,CAAC"}
@@ -0,0 +1,136 @@
1
+ // 判断值是否为数字
2
+ export const isNumeric = (value) => {
3
+ if (typeof value === 'number')
4
+ return Number.isFinite(value);
5
+ if (typeof value === 'string')
6
+ return !isNaN(parseFloat(value)) && isFinite(Number(value));
7
+ return false;
8
+ };
9
+ // 将字符串转成数字
10
+ export const convertToNumber = (input) => {
11
+ // 处理 null 和 undefined
12
+ if (input === null || input === undefined)
13
+ return input;
14
+ // 处理字符串
15
+ if (typeof input === 'string') {
16
+ const num = Number(input);
17
+ return (isNaN(num) ? input : num);
18
+ }
19
+ // 处理数组
20
+ if (Array.isArray(input)) {
21
+ return input.map((item) => convertToNumber(item));
22
+ }
23
+ // 处理对象
24
+ if (typeof input === 'object') {
25
+ const result = {};
26
+ for (const key in input) {
27
+ result[key] = convertToNumber(input[key]);
28
+ }
29
+ return result;
30
+ }
31
+ // 其他类型直接返回
32
+ return input;
33
+ };
34
+ // 合并数组
35
+ // nestedArrays : 嵌套数组,[[18,1],[18,3],[18,2]]
36
+ // singleArrays: [18,1],[18,3],[18,2]
37
+ // 数字排序
38
+ // merge([18, 1], [18, 2], [18, 3]);
39
+ // [1, 2, 3, 18]
40
+ // 字符串排序
41
+ // merge(["a", "b"], ["a", "c"], ["a", "r"]);
42
+ // ["a", "b", "c", "r"]
43
+ // 中文排序
44
+ // merge(["张三", "李四"], ["王五", "张三"]);
45
+ // ["李四", "王五", "张三"](按拼音排序)
46
+ export const merge = (sort, ...args) => {
47
+ const arrays = Array.isArray(args[0][0])
48
+ ? args[0]
49
+ : args;
50
+ const unique = [...new Set(arrays.flat())];
51
+ if (sort !== 'none') {
52
+ return unique.sort((a, b) => {
53
+ if (typeof a === 'number' && typeof b === 'number') {
54
+ return sort === 'asc' ? a - b : b - a; // 数字升序
55
+ }
56
+ return sort === 'asc'
57
+ ? String(a).localeCompare(String(b))
58
+ : String(b).localeCompare(String(a)); // 字符串字母排序
59
+ });
60
+ }
61
+ else
62
+ return unique;
63
+ };
64
+ // 删除数组中指定值
65
+ // removeFromArray([1, 2, 3, 4], 3); // [1, 2, 4]
66
+ export function arrayRemoveByValue(arr, value) {
67
+ return arr.filter((item) => item !== value);
68
+ }
69
+ // 删除对象数组中指定项,按 key 匹配
70
+ // const hours = [
71
+ // { day: "周一", hours: "09:00-21:00" },
72
+ // { day: "周二", hours: "09:00-21:00" },
73
+ // { day: "周三", hours: "09:00-21:00" },
74
+ // ];
75
+ // removeByKey(hours, "day", "周二");
76
+ export function arrayRemoveByKey(arr, key, value) {
77
+ return arr.filter((item) => item[key] !== value);
78
+ }
79
+ // 按索引删除
80
+ // removeByIndex(["a", "b", "c"], 1); // ["a", "c"]
81
+ export function arrayRemoveByIndex(arr, index) {
82
+ return arr.filter((_, i) => i !== index);
83
+ }
84
+ // ========================== 使用示例 ==========================
85
+ // const result = mergeObjects(
86
+ // { role: true },
87
+ // { permission: true },
88
+ // { user: true }
89
+ // );
90
+ // console.log(result); // { role: true, permission: true, user: true }
91
+ export const mergeObjects = (...objects) => {
92
+ return Object.assign({}, ...objects);
93
+ };
94
+ // ========================== 使用示例 ==========================
95
+ // const result = flattenIndexedObject({
96
+ // "0": { role: true },
97
+ // "1": { permission: true },
98
+ // "2": { user: true },
99
+ // });
100
+ // console.log(result);
101
+ // { role: true, permission: true, user: true }
102
+ export const flattenIndexedObject = (items) => {
103
+ // 如果是数组,直接处理
104
+ if (Array.isArray(items)) {
105
+ return items.reduce((acc, obj) => ({ ...acc, ...obj }), {});
106
+ }
107
+ // 如果是对象,用 Object.values 处理
108
+ return Object.values(items).reduce((acc, obj) => ({ ...acc, ...obj }), {});
109
+ };
110
+ // ========================== 使用示例 ==========================
111
+ // const result = flattenNestedPermissions([
112
+ // [{ role: true }, { permission: true }],
113
+ // undefined,
114
+ // [{ user: true }],
115
+ // ]);
116
+ // console.log(result);
117
+ // { role: true, permission: true, user: true }
118
+ export const flattenNestedPermissions = (nestedPermissions) => {
119
+ return nestedPermissions
120
+ .filter((arr) => arr !== undefined) // 过滤 undefined
121
+ .flat() // 展平嵌套数组
122
+ .reduce((acc, obj) => ({ ...acc, ...obj }), {});
123
+ };
124
+ // 权限验证
125
+ export const checkUserPermission = (user, accessPermissions) => {
126
+ const userPermissions = user.roles?.map((role) => role.permissions?.map((permission) => ({ [permission.action]: true })));
127
+ const access = userPermissions
128
+ ? flattenNestedPermissions(userPermissions)
129
+ : {};
130
+ for (const permission of accessPermissions) {
131
+ if (access[permission])
132
+ return true;
133
+ }
134
+ return false;
135
+ };
136
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/utils/tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hugo.ye/common",
3
- "version": "1.0.133",
3
+ "version": "1.0.135",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",