vona-module-a-permission 5.1.13 → 5.1.14

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.
@@ -49,27 +49,38 @@ declare module 'vona-module-a-event' {
49
49
  }
50
50
  /** event: end */
51
51
  /** summerCache: begin */
52
- export * from '../bean/summerCache.permission.ts';
52
+ export * from '../bean/summerCache.permissionActionByRoles.ts';
53
+ export * from '../bean/summerCache.permissionUser.ts';
53
54
  import { type IDecoratorSummerCacheOptions } from 'vona-module-a-summer';
54
55
  declare module 'vona-module-a-summer' {
55
56
  interface ISummerCacheRecord {
56
- 'a-permission:permission': IDecoratorSummerCacheOptions;
57
+ 'a-permission:permissionActionByRoles': IDecoratorSummerCacheOptions;
58
+ 'a-permission:permissionUser': IDecoratorSummerCacheOptions;
57
59
  }
58
60
  }
59
61
  declare module 'vona-module-a-permission' {
60
- interface SummerCachePermission {
62
+ interface SummerCachePermissionActionByRoles {
61
63
  }
62
- interface SummerCachePermission {
63
- get $beanFullName(): 'a-permission.summerCache.permission';
64
- get $onionName(): 'a-permission:permission';
64
+ interface SummerCachePermissionActionByRoles {
65
+ get $beanFullName(): 'a-permission.summerCache.permissionActionByRoles';
66
+ get $onionName(): 'a-permission:permissionActionByRoles';
67
+ get $onionOptions(): IDecoratorSummerCacheOptions;
68
+ }
69
+ interface SummerCachePermissionUser {
70
+ }
71
+ interface SummerCachePermissionUser {
72
+ get $beanFullName(): 'a-permission.summerCache.permissionUser';
73
+ get $onionName(): 'a-permission:permissionUser';
65
74
  get $onionOptions(): IDecoratorSummerCacheOptions;
66
75
  }
67
76
  }
68
77
  /** summerCache: end */
69
78
  /** summerCache: begin */
70
- import type { SummerCachePermission } from '../bean/summerCache.permission.ts';
79
+ import type { SummerCachePermissionActionByRoles } from '../bean/summerCache.permissionActionByRoles.ts';
80
+ import type { SummerCachePermissionUser } from '../bean/summerCache.permissionUser.ts';
71
81
  export interface IModuleSummerCache {
72
- 'permission': SummerCachePermission;
82
+ 'permissionActionByRoles': SummerCachePermissionActionByRoles;
83
+ 'permissionUser': SummerCachePermissionUser;
73
84
  }
74
85
  /** summerCache: end */
75
86
  /** dto: begin */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"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"}
@@ -4,18 +4,19 @@ import { BeanBase } from 'vona';
4
4
  export declare class BeanPermission extends BeanBase {
5
5
  clearAllCaches(): Promise<void>;
6
6
  protected retrievePermissionsCacheKey(info: ICachingActionKeyInfo): string;
7
- protected retrievePermissionsDefaultCacheKey(info: ICachingActionKeyInfo): string;
7
+ protected retrievePermissionActionCacheKey(info: ICachingActionKeyInfo): string;
8
8
  retrievePermissions(resource: keyof IResourceRecord): Promise<IOpenapiPermissions>;
9
9
  protected retrievePermissionsDefault(resource: keyof IResourceRecord): Promise<IOpenapiPermissions>;
10
10
  getPermissionsDefault(resource: keyof IResourceRecord): Promise<IOpenapiPermissions>;
11
- private _buildPermissionProfileKey;
12
- private _extractCurrentRoleNames;
13
- private _getPermissionOfActionByMetadata;
14
- private _evaluatePassportGuardsStatically;
15
- private _hasUnknownGuard;
16
- private _hasDynamicUserNameGuard;
11
+ retrievePermissionAction(resource: keyof IResourceRecord, actionKey: string): Promise<boolean>;
12
+ protected retrievePermissionActionByRoles(resource: keyof IResourceRecord, actionKey: string): Promise<boolean>;
13
+ private _getRoutePathInfo;
14
+ private _getControllerRoutes;
15
+ private _getControllerActionRoute;
16
+ private _extractCurrentRoleIdsSorted;
17
+ private _matchPassportMeta;
17
18
  private _getPassportOptions;
18
19
  private _matchPassportOptions;
19
- private _matchRoleNameOptions;
20
+ private _evaluatePermissionAction;
20
21
  }
21
22
  //# sourceMappingURL=bean.permission.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bean.permission.d.ts","sourceRoot":"","sources":["../../src/bean/bean.permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAEV,mBAAmB,EACnB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAA4B,QAAQ,EAA6B,MAAM,MAAM,CAAC;AAsBrF,qBACa,cAAe,SAAQ,QAAQ;IAC7B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5C,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM;IAM1E,SAAS,CAAC,kCAAkC,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM;IAK3E,mBAAmB,CAAC,QAAQ,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;cAUxE,0BAA0B,CACxC,QAAQ,EAAE,MAAM,eAAe,GAC9B,OAAO,CAAC,mBAAmB,CAAC;IAIzB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyB1F,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,gCAAgC;IAKxC,OAAO,CAAC,iCAAiC;IAYzC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,qBAAqB;CAS9B"}
1
+ {"version":3,"file":"bean.permission.d.ts","sourceRoot":"","sources":["../../src/bean/bean.permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAEV,mBAAmB,EACnB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAe,QAAQ,EAA6B,MAAM,MAAM,CAAC;AAkBxE,qBACa,cAAe,SAAQ,QAAQ;IAC7B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5C,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM;IAM1E,SAAS,CAAC,gCAAgC,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM;IAUzE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;cAMxE,0BAA0B,CACxC,QAAQ,EAAE,MAAM,eAAe,GAC9B,OAAO,CAAC,mBAAmB,CAAC;IAIzB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAe7E,wBAAwB,CACnC,QAAQ,EAAE,MAAM,eAAe,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;cAWH,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,eAAe,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAMnB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,4BAA4B;IAKpC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,qBAAqB;YAWf,yBAAyB;CAiBxC"}
@@ -0,0 +1,8 @@
1
+ import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
2
+ import { ServiceSummerCacheBase } from 'vona-module-a-summer';
3
+ export type TSummerCachePermissionActionByRolesKey = any;
4
+ export type TSummerCachePermissionActionByRolesData = any;
5
+ export declare class SummerCachePermissionActionByRoles extends ServiceSummerCacheBase<TSummerCachePermissionActionByRolesKey, TSummerCachePermissionActionByRolesData> implements ISummerCacheGet<TSummerCachePermissionActionByRolesKey, TSummerCachePermissionActionByRolesData> {
6
+ getNative(_key?: TSummerCachePermissionActionByRolesKey, _options?: TSummerCacheActionOptions<TSummerCachePermissionActionByRolesKey, TSummerCachePermissionActionByRolesData>): Promise<TSummerCachePermissionActionByRolesData | undefined>;
7
+ }
8
+ //# sourceMappingURL=summerCache.permissionActionByRoles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summerCache.permissionActionByRoles.d.ts","sourceRoot":"","sources":["../../src/bean/summerCache.permissionActionByRoles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAAE,sBAAsB,EAAe,MAAM,sBAAsB,CAAC;AAE3E,MAAM,MAAM,sCAAsC,GAAG,GAAG,CAAC;AACzD,MAAM,MAAM,uCAAuC,GAAG,GAAG,CAAC;AAE1D,qBACa,kCACX,SAAQ,sBAAsB,CAC5B,sCAAsC,EACtC,uCAAuC,CAEzC,YACE,eAAe,CACb,sCAAsC,EACtC,uCAAuC,CACxC;IAEG,SAAS,CACb,IAAI,CAAC,EAAE,sCAAsC,EAC7C,QAAQ,CAAC,EAAE,yBAAyB,CAClC,sCAAsC,EACtC,uCAAuC,CACxC,GACA,OAAO,CAAC,uCAAuC,GAAG,SAAS,CAAC;CAChE"}
@@ -0,0 +1,8 @@
1
+ import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
2
+ import { ServiceSummerCacheBase } from 'vona-module-a-summer';
3
+ export type TSummerCachePermissionUserKey = any;
4
+ export type TSummerCachePermissionUserData = any;
5
+ export declare class SummerCachePermissionUser extends ServiceSummerCacheBase<TSummerCachePermissionUserKey, TSummerCachePermissionUserData> implements ISummerCacheGet<TSummerCachePermissionUserKey, TSummerCachePermissionUserData> {
6
+ getNative(_key?: TSummerCachePermissionUserKey, _options?: TSummerCacheActionOptions<TSummerCachePermissionUserKey, TSummerCachePermissionUserData>): Promise<TSummerCachePermissionUserData | undefined>;
7
+ }
8
+ //# sourceMappingURL=summerCache.permissionUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summerCache.permissionUser.d.ts","sourceRoot":"","sources":["../../src/bean/summerCache.permissionUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAAE,sBAAsB,EAAe,MAAM,sBAAsB,CAAC;AAE3E,MAAM,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAChD,MAAM,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAEjD,qBACa,yBACX,SAAQ,sBAAsB,CAAC,6BAA6B,EAAE,8BAA8B,CAC5F,YAAW,eAAe,CAAC,6BAA6B,EAAE,8BAA8B,CAAC;IAEnF,SAAS,CACb,IAAI,CAAC,EAAE,6BAA6B,EACpC,QAAQ,CAAC,EAAE,yBAAyB,CAClC,6BAA6B,EAC7B,8BAA8B,CAC/B,GACA,OAAO,CAAC,8BAA8B,GAAG,SAAS,CAAC;CACvD"}
package/dist/index.js CHANGED
@@ -1,18 +1,14 @@
1
- import { beanFullNameFromOnionName, BeanInfo, BeanBase, appResource, appMetadata, BeanScopeBase } from 'vona';
1
+ import { beanFullNameFromOnionName, BeanInfo, BeanBase, appResource, BeanScopeBase } from 'vona';
2
2
  import { __decorate, __metadata } from 'tslib';
3
3
  import { Bean, Scope } from 'vona-module-a-bean';
4
4
  import { Caching } from 'vona-module-a-caching';
5
- import { SymbolUseOnionOptionsRouteReal } from 'vona-module-a-onion';
6
- import { recordResourceNameToRoutePath, Dto } from 'vona-module-a-web';
5
+ import { recordResourceNameToRoutePath, getCacheControllerRoutes, composeGuards, Dto } from 'vona-module-a-web';
7
6
  import { Event, BeanEventBase } from 'vona-module-a-event';
8
7
  import { SummerCache, ServiceSummerCacheBase } from 'vona-module-a-summer';
9
8
  import { Api, v } from 'vona-module-a-openapiutils';
10
9
  import z from 'zod';
11
10
 
12
11
  const BeanFullNameGuardPassport = beanFullNameFromOnionName('a-user:passport', 'guard');
13
- const BeanFullNameGuardRoleName = beanFullNameFromOnionName('a-user:roleName', 'guard');
14
- const BeanFullNameGuardUserName = beanFullNameFromOnionName('a-user:userName', 'guard');
15
- const BeanFullNamesGuardSupported = new Set([BeanFullNameGuardPassport, BeanFullNameGuardRoleName, BeanFullNameGuardUserName]);
16
12
  const GuardOptionsPassportDefault = {
17
13
  public: false,
18
14
  activated: true,
@@ -20,16 +16,20 @@ const GuardOptionsPassportDefault = {
20
16
  };
21
17
  let BeanPermission = class BeanPermission extends BeanBase {
22
18
  async clearAllCaches() {
23
- const cachePermission = this.bean.summer.cache(beanFullNameFromOnionName('a-permission:permission', 'summerCache'));
24
- await cachePermission.clear();
19
+ const cachePermissionUser = this.bean.summer.cache(beanFullNameFromOnionName('a-permission:permissionUser', 'summerCache'));
20
+ const cachePermissionActionByRoles = this.bean.summer.cache(beanFullNameFromOnionName('a-permission:permissionActionByRoles', 'summerCache'));
21
+ await cachePermissionUser.clear();
22
+ await cachePermissionActionByRoles.clear();
25
23
  }
26
24
  retrievePermissionsCacheKey(info) {
27
25
  const resource = info.args[0];
28
26
  const userId = this.ctx.passport.user?.id;
29
27
  return `user:${resource}_${userId}`;
30
28
  }
31
- retrievePermissionsDefaultCacheKey(info) {
32
- return `default:${this._buildPermissionProfileKey(info.args[0])}`;
29
+ retrievePermissionActionCacheKey(info) {
30
+ const [resource, actionKey] = info.args;
31
+ const roleIdsKey = this._extractCurrentRoleIdsSorted().join(',') || 'none';
32
+ return `action:${resource}:${actionKey}:roles:${roleIdsKey}`;
33
33
  }
34
34
  async retrievePermissions(resource) {
35
35
  return await this.scope.event.retrievePermissions.emit({
@@ -42,52 +42,49 @@ let BeanPermission = class BeanPermission extends BeanBase {
42
42
  return await this.getPermissionsDefault(resource);
43
43
  }
44
44
  async getPermissionsDefault(resource) {
45
- const routePathInfo = recordResourceNameToRoutePath[resource];
46
- if (!routePathInfo) throw new Error(`not found routePath of resource: ${resource}`);
47
- const controller = routePathInfo.controller;
48
- if (!appResource.getBean(controller)) throw new Error('invalid controller');
49
- const descs = Object.getOwnPropertyDescriptors(controller.prototype);
50
45
  const actionsIgnore = this.scope.config.permission.actionsIgnore;
51
- const actionKeys = Object.keys(descs).filter(actionKey => actionKey !== 'constructor' && !actionsIgnore.includes(actionKey));
46
+ const actionRoutes = this._getControllerRoutes(resource).filter(route => !actionsIgnore.includes(route.action));
52
47
  const permissionsActions = {};
53
- for (const actionKey of actionKeys) {
54
- const desc = descs[actionKey];
55
- if (!desc.value || typeof desc.value !== 'function') continue;
56
- const routeReal = appMetadata.getMetadata(SymbolUseOnionOptionsRouteReal, controller.prototype, actionKey);
57
- permissionsActions[actionKey] = this._getPermissionOfActionByMetadata(routeReal);
48
+ for (const route of actionRoutes) {
49
+ permissionsActions[route.action] = await this.retrievePermissionAction(resource, route.action);
58
50
  }
59
51
  return {
60
52
  actions: permissionsActions
61
53
  };
62
54
  }
63
- _buildPermissionProfileKey(resource) {
64
- if (!this.bean.passport.isAuthenticated) return `${resource}__anon`;
65
- const activated = this.bean.passport.isActivated ? 1 : 0;
66
- const roleNames = this._extractCurrentRoleNames();
67
- return `${resource}__auth__act:${activated}__roles:${roleNames.join(',')}`;
55
+ async retrievePermissionAction(resource, actionKey) {
56
+ const route = this._getControllerActionRoute(resource, actionKey);
57
+ if (!route?.route?.meta) return false;
58
+ if (!this._matchPassportMeta(route.route.meta)) return false;
59
+ return await this.retrievePermissionActionByRoles(resource, actionKey);
68
60
  }
69
- _extractCurrentRoleNames() {
70
- const roleNames = this.bean.passport.currentRoles?.map(item => item.name) ?? [];
71
- return Array.from(new Set(roleNames)).sort();
61
+ async retrievePermissionActionByRoles(resource, actionKey) {
62
+ const route = this._getControllerActionRoute(resource, actionKey);
63
+ if (!route?.route?.meta) return false;
64
+ return await this._evaluatePermissionAction(route);
72
65
  }
73
- _getPermissionOfActionByMetadata(routeReal) {
74
- if (!routeReal?.meta) return false;
75
- return this._evaluatePassportGuardsStatically(routeReal.meta);
66
+ _getRoutePathInfo(resource) {
67
+ const routePathInfo = recordResourceNameToRoutePath[resource];
68
+ if (!routePathInfo) throw new Error(`not found routePath of resource: ${resource}`);
69
+ return routePathInfo;
76
70
  }
77
- _evaluatePassportGuardsStatically(meta) {
78
- if (this._hasUnknownGuard(meta)) return false;
79
- if (this._hasDynamicUserNameGuard(meta)) return false;
80
- const passportOptions = this._getPassportOptions(meta);
81
- if (!this._matchPassportOptions(passportOptions)) return false;
82
- const roleNameOptions = meta[BeanFullNameGuardRoleName];
83
- if (!this._matchRoleNameOptions(roleNameOptions)) return false;
84
- return true;
71
+ _getControllerRoutes(resource) {
72
+ const routePathInfo = this._getRoutePathInfo(resource);
73
+ const controller = routePathInfo.controller;
74
+ const beanOptions = appResource.getBean(controller);
75
+ if (!beanOptions) throw new Error('invalid controller');
76
+ return getCacheControllerRoutes(this.app)[beanOptions.beanFullName] ?? [];
85
77
  }
86
- _hasUnknownGuard(meta) {
87
- return Object.keys(meta).some(key => key.includes('.guard.') && !BeanFullNamesGuardSupported.has(key));
78
+ _getControllerActionRoute(resource, actionKey) {
79
+ return this._getControllerRoutes(resource).find(route => route.action === actionKey);
88
80
  }
89
- _hasDynamicUserNameGuard(meta) {
90
- return BeanFullNameGuardUserName in meta;
81
+ _extractCurrentRoleIdsSorted() {
82
+ const roleIds = this.bean.passport.currentRoles?.map(item => String(item.id)) ?? [];
83
+ return Array.from(new Set(roleIds)).sort();
84
+ }
85
+ _matchPassportMeta(meta) {
86
+ const passportOptions = this._getPassportOptions(meta);
87
+ return this._matchPassportOptions(passportOptions);
91
88
  }
92
89
  _getPassportOptions(meta) {
93
90
  return {
@@ -103,24 +100,32 @@ let BeanPermission = class BeanPermission extends BeanBase {
103
100
  if (options.activated === false && this.bean.passport.isActivated) return false;
104
101
  return true;
105
102
  }
106
- _matchRoleNameOptions(options) {
107
- if (!options) return true;
108
- if (!options.name) return false;
109
- if (options.passWhenMatched === false) return false;
110
- if (options.rejectWhenDismatched === false) return false;
111
- const roleNamesCurrent = this._extractCurrentRoleNames();
112
- const roleNamesRequired = Array.isArray(options.name) ? options.name : [options.name];
113
- return roleNamesCurrent.some(roleName => roleNamesRequired.includes(roleName));
103
+ async _evaluatePermissionAction(route) {
104
+ const ctx = this.ctx;
105
+ const routePrevious = ctx.route;
106
+ const innerAccessPrevious = ctx.innerAccess;
107
+ try {
108
+ ctx.route = route;
109
+ ctx.innerAccess = false;
110
+ const result = await composeGuards(this.app, route)(this.ctx);
111
+ return result !== false;
112
+ } catch (err) {
113
+ if ([401, 403].includes(err?.code)) return false;
114
+ throw err;
115
+ } finally {
116
+ ctx.route = routePrevious;
117
+ ctx.innerAccess = innerAccessPrevious;
118
+ }
114
119
  }
115
120
  };
116
121
  __decorate([Caching.get({
117
- cacheName: 'a-permission:permission',
122
+ cacheName: 'a-permission:permissionUser',
118
123
  cacheKeyFn: 'retrievePermissionsCacheKey'
119
124
  }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise)], BeanPermission.prototype, "retrievePermissions", null);
120
125
  __decorate([Caching.get({
121
- cacheName: 'a-permission:permission',
122
- cacheKeyFn: 'retrievePermissionsDefaultCacheKey'
123
- }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise)], BeanPermission.prototype, "retrievePermissionsDefault", null);
126
+ cacheName: 'a-permission:permissionActionByRoles',
127
+ cacheKeyFn: 'retrievePermissionActionCacheKey'
128
+ }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String]), __metadata("design:returntype", Promise)], BeanPermission.prototype, "retrievePermissionActionByRoles", null);
124
129
  BeanPermission = __decorate([Bean(), BeanInfo({
125
130
  module: "a-permission"
126
131
  })], BeanPermission);
@@ -130,14 +135,19 @@ EventRetrievePermissions = __decorate([Event(), BeanInfo({
130
135
  module: "a-permission"
131
136
  })], EventRetrievePermissions);
132
137
 
133
- let SummerCachePermission = class SummerCachePermission extends ServiceSummerCacheBase {
138
+ let SummerCachePermissionActionByRoles = class SummerCachePermissionActionByRoles extends ServiceSummerCacheBase {
139
+ async getNative(_key, _options) {}
140
+ };
141
+ SummerCachePermissionActionByRoles = __decorate([SummerCache(), BeanInfo({
142
+ module: "a-permission"
143
+ })], SummerCachePermissionActionByRoles);
144
+
145
+ let SummerCachePermissionUser = class SummerCachePermissionUser extends ServiceSummerCacheBase {
134
146
  async getNative(_key, _options) {}
135
147
  };
136
- SummerCachePermission = __decorate([SummerCache({
137
- preset: 'mem'
138
- }), BeanInfo({
148
+ SummerCachePermissionUser = __decorate([SummerCache(), BeanInfo({
139
149
  module: "a-permission"
140
- })], SummerCachePermission);
150
+ })], SummerCachePermissionUser);
141
151
 
142
152
  let DtoPermissions = class DtoPermissions {
143
153
  constructor() {
@@ -167,5 +177,5 @@ ScopeModuleAPermission = __decorate([Scope(), BeanInfo({
167
177
  })], ScopeModuleAPermission);
168
178
  /** scope: end */
169
179
 
170
- export { BeanPermission, DtoPermissions, EventRetrievePermissions, ScopeModuleAPermission, SummerCachePermission, config };
180
+ export { BeanPermission, DtoPermissions, EventRetrievePermissions, ScopeModuleAPermission, SummerCachePermissionActionByRoles, SummerCachePermissionUser, config };
171
181
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/bean/bean.permission.ts","../src/bean/event.retrievePermissions.ts","../src/bean/summerCache.permission.ts","../src/dto/permissions.tsx","../src/config/config.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["BeanFullNameGuardPassport","beanFullNameFromOnionName","BeanFullNameGuardRoleName","BeanFullNameGuardUserName","BeanFullNamesGuardSupported","Set","GuardOptionsPassportDefault","public","activated","checkAuthToken","BeanPermission","BeanBase","clearAllCaches","cachePermission","bean","summer","cache","clear","retrievePermissionsCacheKey","info","resource","args","userId","ctx","passport","user","id","retrievePermissionsDefaultCacheKey","_buildPermissionProfileKey","retrievePermissions","scope","event","emit","retrievePermissionsDefault","getPermissionsDefault","routePathInfo","recordResourceNameToRoutePath","Error","controller","appResource","getBean","descs","Object","getOwnPropertyDescriptors","prototype","actionsIgnore","config","permission","actionKeys","keys","filter","actionKey","includes","permissionsActions","desc","value","routeReal","appMetadata","getMetadata","SymbolUseOnionOptionsRouteReal","_getPermissionOfActionByMetadata","actions","isAuthenticated","isActivated","roleNames","_extractCurrentRoleNames","join","currentRoles","map","item","name","Array","from","sort","meta","_evaluatePassportGuardsStatically","_hasUnknownGuard","_hasDynamicUserNameGuard","passportOptions","_getPassportOptions","_matchPassportOptions","roleNameOptions","_matchRoleNameOptions","some","key","has","options","passWhenMatched","rejectWhenDismatched","roleNamesCurrent","roleNamesRequired","isArray","roleName","__decorate","Caching","get","cacheName","cacheKeyFn","Bean","__z_BeanInfo","module","EventRetrievePermissions","BeanEventBase","Event","SummerCachePermission","ServiceSummerCacheBase","getNative","_key","_options","SummerCache","preset","DtoPermissions","constructor","roleIds","Api","field","v","optional","array","tableIdentity","z","string","Dto","_app","ScopeModuleAPermission","BeanScopeBase","Scope"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/bean/bean.permission.ts","../src/bean/event.retrievePermissions.ts","../src/bean/summerCache.permissionActionByRoles.ts","../src/bean/summerCache.permissionUser.ts","../src/dto/permissions.tsx","../src/config/config.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["BeanFullNameGuardPassport","beanFullNameFromOnionName","GuardOptionsPassportDefault","public","activated","checkAuthToken","BeanPermission","BeanBase","clearAllCaches","cachePermissionUser","bean","summer","cache","cachePermissionActionByRoles","clear","retrievePermissionsCacheKey","info","resource","args","userId","ctx","passport","user","id","retrievePermissionActionCacheKey","actionKey","roleIdsKey","_extractCurrentRoleIdsSorted","join","retrievePermissions","scope","event","emit","retrievePermissionsDefault","getPermissionsDefault","actionsIgnore","config","permission","actionRoutes","_getControllerRoutes","filter","route","includes","action","permissionsActions","retrievePermissionAction","actions","_getControllerActionRoute","meta","_matchPassportMeta","retrievePermissionActionByRoles","_evaluatePermissionAction","_getRoutePathInfo","routePathInfo","recordResourceNameToRoutePath","Error","controller","beanOptions","appResource","getBean","getCacheControllerRoutes","app","beanFullName","find","roleIds","currentRoles","map","item","String","Array","from","Set","sort","passportOptions","_getPassportOptions","_matchPassportOptions","options","isAuthenticated","isActivated","routePrevious","innerAccessPrevious","innerAccess","result","composeGuards","err","code","__decorate","Caching","get","cacheName","cacheKeyFn","prototype","Bean","__z_BeanInfo","module","EventRetrievePermissions","BeanEventBase","Event","SummerCachePermissionActionByRoles","ServiceSummerCacheBase","getNative","_key","_options","SummerCache","SummerCachePermissionUser","DtoPermissions","constructor","roleNames","Api","field","v","optional","array","tableIdentity","z","string","Dto","_app","ScopeModuleAPermission","BeanScopeBase","Scope"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vona-module-a-permission",
3
- "version": "5.1.13",
4
- "gitHead": "1a39e8008e1b48001cfeff475ddd53a2a0d867c4",
3
+ "version": "5.1.14",
4
+ "gitHead": "f7296d0004da7e5c173bc9149d209c2e57cab1b8",
5
5
  "description": "",
6
6
  "keywords": [
7
7
  "Vona Module"
@@ -19,7 +19,7 @@ declare module 'vona-module-a-permission' {
19
19
  /** bean: end */
20
20
  /** bean: begin */
21
21
  import type { BeanPermission } from '../bean/bean.permission.ts';
22
- import 'vona';
22
+ import 'vona';
23
23
  declare module 'vona' {
24
24
  export interface IBeanRecordGlobal {
25
25
  'permission': BeanPermission;
@@ -64,35 +64,50 @@ declare module 'vona-module-a-event' {
64
64
  }
65
65
  /** event: end */
66
66
  /** summerCache: begin */
67
- export * from '../bean/summerCache.permission.ts';
67
+ export * from '../bean/summerCache.permissionActionByRoles.ts';
68
+ export * from '../bean/summerCache.permissionUser.ts';
68
69
 
69
70
  import { type IDecoratorSummerCacheOptions } from 'vona-module-a-summer';
70
71
  declare module 'vona-module-a-summer' {
71
72
 
72
73
  export interface ISummerCacheRecord {
73
- 'a-permission:permission': IDecoratorSummerCacheOptions;
74
+ 'a-permission:permissionActionByRoles': IDecoratorSummerCacheOptions;
75
+ 'a-permission:permissionUser': IDecoratorSummerCacheOptions;
74
76
  }
75
77
 
76
78
 
77
79
  }
78
80
  declare module 'vona-module-a-permission' {
79
81
 
80
- export interface SummerCachePermission {
82
+ export interface SummerCachePermissionActionByRoles {
83
+ /** @internal */
84
+ get scope(): ScopeModuleAPermission;
85
+ }
86
+
87
+ export interface SummerCachePermissionActionByRoles {
88
+ get $beanFullName(): 'a-permission.summerCache.permissionActionByRoles';
89
+ get $onionName(): 'a-permission:permissionActionByRoles';
90
+ get $onionOptions(): IDecoratorSummerCacheOptions;
91
+ }
92
+
93
+ export interface SummerCachePermissionUser {
81
94
  /** @internal */
82
95
  get scope(): ScopeModuleAPermission;
83
96
  }
84
97
 
85
- export interface SummerCachePermission {
86
- get $beanFullName(): 'a-permission.summerCache.permission';
87
- get $onionName(): 'a-permission:permission';
98
+ export interface SummerCachePermissionUser {
99
+ get $beanFullName(): 'a-permission.summerCache.permissionUser';
100
+ get $onionName(): 'a-permission:permissionUser';
88
101
  get $onionOptions(): IDecoratorSummerCacheOptions;
89
102
  }
90
103
  }
91
104
  /** summerCache: end */
92
105
  /** summerCache: begin */
93
- import type { SummerCachePermission } from '../bean/summerCache.permission.ts';
106
+ import type { SummerCachePermissionActionByRoles } from '../bean/summerCache.permissionActionByRoles.ts';
107
+ import type { SummerCachePermissionUser } from '../bean/summerCache.permissionUser.ts';
94
108
  export interface IModuleSummerCache {
95
- 'permission': SummerCachePermission;
109
+ 'permissionActionByRoles': SummerCachePermissionActionByRoles;
110
+ 'permissionUser': SummerCachePermissionUser;
96
111
  }
97
112
  /** summerCache: end */
98
113
  /** dto: begin */
@@ -4,23 +4,19 @@ import type {
4
4
  IOpenapiPermissions,
5
5
  IResourceRecord,
6
6
  } from 'vona-module-a-openapi';
7
- import type { IGuardOptionsPassport, IGuardOptionsRoleName } from 'vona-module-a-user';
8
- import type { ContextRouteMetadata, IRecordResourceNameToRoutePathItem } from 'vona-module-a-web';
7
+ import type { IGuardOptionsPassport } from 'vona-module-a-user';
8
+ import type { ContextRoute, IRecordResourceNameToRoutePathItem } from 'vona-module-a-web';
9
9
 
10
- import { appMetadata, appResource, BeanBase, beanFullNameFromOnionName } from 'vona';
10
+ import { appResource, BeanBase, beanFullNameFromOnionName } from 'vona';
11
11
  import { Bean } from 'vona-module-a-bean';
12
12
  import { Caching } from 'vona-module-a-caching';
13
- import { SymbolUseOnionOptionsRouteReal } from 'vona-module-a-onion';
14
- import { recordResourceNameToRoutePath } from 'vona-module-a-web';
13
+ import {
14
+ composeGuards,
15
+ getCacheControllerRoutes,
16
+ recordResourceNameToRoutePath,
17
+ } from 'vona-module-a-web';
15
18
 
16
19
  const BeanFullNameGuardPassport = beanFullNameFromOnionName('a-user:passport', 'guard');
17
- const BeanFullNameGuardRoleName = beanFullNameFromOnionName('a-user:roleName', 'guard');
18
- const BeanFullNameGuardUserName = beanFullNameFromOnionName('a-user:userName', 'guard');
19
- const BeanFullNamesGuardSupported = new Set<string>([
20
- BeanFullNameGuardPassport,
21
- BeanFullNameGuardRoleName,
22
- BeanFullNameGuardUserName,
23
- ]);
24
20
  const GuardOptionsPassportDefault: IGuardOptionsPassport = {
25
21
  public: false,
26
22
  activated: true,
@@ -32,10 +28,14 @@ type TGuardMeta = Record<string, unknown>;
32
28
  @Bean()
33
29
  export class BeanPermission extends BeanBase {
34
30
  public async clearAllCaches(): Promise<void> {
35
- const cachePermission = this.bean.summer.cache(
36
- beanFullNameFromOnionName('a-permission:permission', 'summerCache'),
31
+ const cachePermissionUser = this.bean.summer.cache(
32
+ beanFullNameFromOnionName('a-permission:permissionUser', 'summerCache'),
37
33
  );
38
- await cachePermission.clear();
34
+ const cachePermissionActionByRoles = this.bean.summer.cache(
35
+ beanFullNameFromOnionName('a-permission:permissionActionByRoles', 'summerCache'),
36
+ );
37
+ await cachePermissionUser.clear();
38
+ await cachePermissionActionByRoles.clear();
39
39
  }
40
40
 
41
41
  protected retrievePermissionsCacheKey(info: ICachingActionKeyInfo): string {
@@ -44,21 +44,22 @@ export class BeanPermission extends BeanBase {
44
44
  return `user:${resource}_${userId}`;
45
45
  }
46
46
 
47
- protected retrievePermissionsDefaultCacheKey(info: ICachingActionKeyInfo): string {
48
- return `default:${this._buildPermissionProfileKey(info.args[0] as never)}`;
47
+ protected retrievePermissionActionCacheKey(info: ICachingActionKeyInfo): string {
48
+ const [resource, actionKey] = info.args as [keyof IResourceRecord, string];
49
+ const roleIdsKey = this._extractCurrentRoleIdsSorted().join(',') || 'none';
50
+ return `action:${resource}:${actionKey}:roles:${roleIdsKey}`;
49
51
  }
50
52
 
51
- @Caching.get({ cacheName: 'a-permission:permission', cacheKeyFn: 'retrievePermissionsCacheKey' })
53
+ @Caching.get({
54
+ cacheName: 'a-permission:permissionUser',
55
+ cacheKeyFn: 'retrievePermissionsCacheKey',
56
+ })
52
57
  async retrievePermissions(resource: keyof IResourceRecord): Promise<IOpenapiPermissions> {
53
58
  return await this.scope.event.retrievePermissions.emit({ resource }, async () => {
54
59
  return await this.retrievePermissionsDefault(resource);
55
60
  });
56
61
  }
57
62
 
58
- @Caching.get({
59
- cacheName: 'a-permission:permission',
60
- cacheKeyFn: 'retrievePermissionsDefaultCacheKey',
61
- })
62
63
  protected async retrievePermissionsDefault(
63
64
  resource: keyof IResourceRecord,
64
65
  ): Promise<IOpenapiPermissions> {
@@ -66,67 +67,72 @@ export class BeanPermission extends BeanBase {
66
67
  }
67
68
 
68
69
  async getPermissionsDefault(resource: keyof IResourceRecord): Promise<IOpenapiPermissions> {
69
- const routePathInfo: IRecordResourceNameToRoutePathItem =
70
- recordResourceNameToRoutePath[resource];
71
- if (!routePathInfo) throw new Error(`not found routePath of resource: ${resource}`);
72
- const controller = routePathInfo.controller;
73
- if (!appResource.getBean(controller)) throw new Error('invalid controller');
74
- const descs = Object.getOwnPropertyDescriptors(controller.prototype);
75
70
  const actionsIgnore = this.scope.config.permission.actionsIgnore;
76
- const actionKeys = Object.keys(descs).filter(
77
- actionKey => actionKey !== 'constructor' && !actionsIgnore.includes(actionKey),
71
+ const actionRoutes = this._getControllerRoutes(resource).filter(
72
+ route => !actionsIgnore.includes(route.action),
78
73
  );
79
74
  const permissionsActions: IOpenapiPermissionModeActionActions = {};
80
- for (const actionKey of actionKeys) {
81
- const desc = descs[actionKey];
82
- if (!desc.value || typeof desc.value !== 'function') continue;
83
- const routeReal: ContextRouteMetadata | undefined = appMetadata.getMetadata(
84
- SymbolUseOnionOptionsRouteReal,
85
- controller.prototype,
86
- actionKey,
75
+ for (const route of actionRoutes) {
76
+ permissionsActions[route.action] = await this.retrievePermissionAction(
77
+ resource,
78
+ route.action,
87
79
  );
88
- permissionsActions[actionKey] = this._getPermissionOfActionByMetadata(routeReal);
89
80
  }
90
81
  return { actions: permissionsActions };
91
82
  }
92
83
 
93
- private _buildPermissionProfileKey(resource: keyof IResourceRecord): string {
94
- if (!this.bean.passport.isAuthenticated) return `${resource}__anon`;
95
- const activated = this.bean.passport.isActivated ? 1 : 0;
96
- const roleNames = this._extractCurrentRoleNames();
97
- return `${resource}__auth__act:${activated}__roles:${roleNames.join(',')}`;
84
+ public async retrievePermissionAction(
85
+ resource: keyof IResourceRecord,
86
+ actionKey: string,
87
+ ): Promise<boolean> {
88
+ const route = this._getControllerActionRoute(resource, actionKey);
89
+ if (!route?.route?.meta) return false;
90
+ if (!this._matchPassportMeta(route.route.meta)) return false;
91
+ return await this.retrievePermissionActionByRoles(resource, actionKey);
98
92
  }
99
93
 
100
- private _extractCurrentRoleNames(): string[] {
101
- const roleNames = this.bean.passport.currentRoles?.map(item => item.name) ?? [];
102
- return Array.from(new Set(roleNames)).sort();
94
+ @Caching.get({
95
+ cacheName: 'a-permission:permissionActionByRoles',
96
+ cacheKeyFn: 'retrievePermissionActionCacheKey',
97
+ })
98
+ protected async retrievePermissionActionByRoles(
99
+ resource: keyof IResourceRecord,
100
+ actionKey: string,
101
+ ): Promise<boolean> {
102
+ const route = this._getControllerActionRoute(resource, actionKey);
103
+ if (!route?.route?.meta) return false;
104
+ return await this._evaluatePermissionAction(route);
103
105
  }
104
106
 
105
- private _getPermissionOfActionByMetadata(routeReal: ContextRouteMetadata | undefined): boolean {
106
- if (!routeReal?.meta) return false;
107
- return this._evaluatePassportGuardsStatically(routeReal.meta);
107
+ private _getRoutePathInfo(resource: keyof IResourceRecord): IRecordResourceNameToRoutePathItem {
108
+ const routePathInfo = recordResourceNameToRoutePath[resource];
109
+ if (!routePathInfo) throw new Error(`not found routePath of resource: ${resource}`);
110
+ return routePathInfo;
108
111
  }
109
112
 
110
- private _evaluatePassportGuardsStatically(meta: TGuardMeta): boolean {
111
- if (this._hasUnknownGuard(meta)) return false;
112
- if (this._hasDynamicUserNameGuard(meta)) return false;
113
- const passportOptions = this._getPassportOptions(meta);
114
- if (!this._matchPassportOptions(passportOptions)) return false;
115
- const roleNameOptions = meta[BeanFullNameGuardRoleName] as
116
- | Partial<IGuardOptionsRoleName>
117
- | undefined;
118
- if (!this._matchRoleNameOptions(roleNameOptions)) return false;
119
- return true;
113
+ private _getControllerRoutes(resource: keyof IResourceRecord): ContextRoute[] {
114
+ const routePathInfo = this._getRoutePathInfo(resource);
115
+ const controller = routePathInfo.controller;
116
+ const beanOptions = appResource.getBean(controller);
117
+ if (!beanOptions) throw new Error('invalid controller');
118
+ return getCacheControllerRoutes(this.app)[beanOptions.beanFullName] ?? [];
120
119
  }
121
120
 
122
- private _hasUnknownGuard(meta: TGuardMeta): boolean {
123
- return Object.keys(meta).some(
124
- key => key.includes('.guard.') && !BeanFullNamesGuardSupported.has(key),
125
- );
121
+ private _getControllerActionRoute(
122
+ resource: keyof IResourceRecord,
123
+ actionKey: string,
124
+ ): ContextRoute | undefined {
125
+ return this._getControllerRoutes(resource).find(route => route.action === actionKey);
126
126
  }
127
127
 
128
- private _hasDynamicUserNameGuard(meta: TGuardMeta): boolean {
129
- return BeanFullNameGuardUserName in meta;
128
+ private _extractCurrentRoleIdsSorted(): string[] {
129
+ const roleIds = this.bean.passport.currentRoles?.map(item => String(item.id)) ?? [];
130
+ return Array.from(new Set(roleIds)).sort();
131
+ }
132
+
133
+ private _matchPassportMeta(meta: TGuardMeta): boolean {
134
+ const passportOptions = this._getPassportOptions(meta);
135
+ return this._matchPassportOptions(passportOptions);
130
136
  }
131
137
 
132
138
  private _getPassportOptions(meta: TGuardMeta): IGuardOptionsPassport {
@@ -147,13 +153,21 @@ export class BeanPermission extends BeanBase {
147
153
  return true;
148
154
  }
149
155
 
150
- private _matchRoleNameOptions(options: Partial<IGuardOptionsRoleName> | undefined): boolean {
151
- if (!options) return true;
152
- if (!options.name) return false;
153
- if (options.passWhenMatched === false) return false;
154
- if (options.rejectWhenDismatched === false) return false;
155
- const roleNamesCurrent = this._extractCurrentRoleNames();
156
- const roleNamesRequired = Array.isArray(options.name) ? options.name : [options.name];
157
- return roleNamesCurrent.some(roleName => roleNamesRequired.includes(roleName as any));
156
+ private async _evaluatePermissionAction(route: ContextRoute): Promise<boolean> {
157
+ const ctx = this.ctx as any;
158
+ const routePrevious = ctx.route;
159
+ const innerAccessPrevious = ctx.innerAccess;
160
+ try {
161
+ ctx.route = route;
162
+ ctx.innerAccess = false;
163
+ const result = await composeGuards(this.app, route)(this.ctx);
164
+ return result !== false;
165
+ } catch (err: any) {
166
+ if ([401, 403].includes(err?.code)) return false;
167
+ throw err;
168
+ } finally {
169
+ ctx.route = routePrevious;
170
+ ctx.innerAccess = innerAccessPrevious;
171
+ }
158
172
  }
159
173
  }
@@ -0,0 +1,27 @@
1
+ import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
2
+
3
+ import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
4
+
5
+ export type TSummerCachePermissionActionByRolesKey = any;
6
+ export type TSummerCachePermissionActionByRolesData = any;
7
+
8
+ @SummerCache()
9
+ export class SummerCachePermissionActionByRoles
10
+ extends ServiceSummerCacheBase<
11
+ TSummerCachePermissionActionByRolesKey,
12
+ TSummerCachePermissionActionByRolesData
13
+ >
14
+ implements
15
+ ISummerCacheGet<
16
+ TSummerCachePermissionActionByRolesKey,
17
+ TSummerCachePermissionActionByRolesData
18
+ >
19
+ {
20
+ async getNative(
21
+ _key?: TSummerCachePermissionActionByRolesKey,
22
+ _options?: TSummerCacheActionOptions<
23
+ TSummerCachePermissionActionByRolesKey,
24
+ TSummerCachePermissionActionByRolesData
25
+ >,
26
+ ): Promise<TSummerCachePermissionActionByRolesData | undefined> {}
27
+ }
@@ -0,0 +1,20 @@
1
+ import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
2
+
3
+ import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
4
+
5
+ export type TSummerCachePermissionUserKey = any;
6
+ export type TSummerCachePermissionUserData = any;
7
+
8
+ @SummerCache()
9
+ export class SummerCachePermissionUser
10
+ extends ServiceSummerCacheBase<TSummerCachePermissionUserKey, TSummerCachePermissionUserData>
11
+ implements ISummerCacheGet<TSummerCachePermissionUserKey, TSummerCachePermissionUserData>
12
+ {
13
+ async getNative(
14
+ _key?: TSummerCachePermissionUserKey,
15
+ _options?: TSummerCacheActionOptions<
16
+ TSummerCachePermissionUserKey,
17
+ TSummerCachePermissionUserData
18
+ >,
19
+ ): Promise<TSummerCachePermissionUserData | undefined> {}
20
+ }
@@ -1,8 +0,0 @@
1
- import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
2
- import { ServiceSummerCacheBase } from 'vona-module-a-summer';
3
- export type TSummerCachePermissionKey = any;
4
- export type TSummerCachePermissionData = any;
5
- export declare class SummerCachePermission extends ServiceSummerCacheBase<TSummerCachePermissionKey, TSummerCachePermissionData> implements ISummerCacheGet<TSummerCachePermissionKey, TSummerCachePermissionData> {
6
- getNative(_key?: TSummerCachePermissionKey, _options?: TSummerCacheActionOptions<TSummerCachePermissionKey, TSummerCachePermissionData>): Promise<TSummerCachePermissionData | undefined>;
7
- }
8
- //# sourceMappingURL=summerCache.permission.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summerCache.permission.d.ts","sourceRoot":"","sources":["../../src/bean/summerCache.permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAAE,sBAAsB,EAAe,MAAM,sBAAsB,CAAC;AAE3E,MAAM,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC5C,MAAM,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE7C,qBACa,qBACX,SAAQ,sBAAsB,CAAC,yBAAyB,EAAE,0BAA0B,CACpF,YAAW,eAAe,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;IAE3E,SAAS,CACb,IAAI,CAAC,EAAE,yBAAyB,EAChC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,GAC1F,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;CACnD"}
@@ -1,17 +0,0 @@
1
- import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
2
-
3
- import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
4
-
5
- export type TSummerCachePermissionKey = any;
6
- export type TSummerCachePermissionData = any;
7
-
8
- @SummerCache({ preset: 'mem' })
9
- export class SummerCachePermission
10
- extends ServiceSummerCacheBase<TSummerCachePermissionKey, TSummerCachePermissionData>
11
- implements ISummerCacheGet<TSummerCachePermissionKey, TSummerCachePermissionData>
12
- {
13
- async getNative(
14
- _key?: TSummerCachePermissionKey,
15
- _options?: TSummerCacheActionOptions<TSummerCachePermissionKey, TSummerCachePermissionData>,
16
- ): Promise<TSummerCachePermissionData | undefined> {}
17
- }