@stratal/framework 0.0.18 → 0.0.20
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/dist/access-control/index.d.mts +180 -0
- package/dist/access-control/index.d.mts.map +1 -0
- package/dist/access-control/index.mjs +71 -0
- package/dist/access-control/index.mjs.map +1 -0
- package/dist/access.service-BjYVtUJw.mjs +145 -0
- package/dist/access.service-BjYVtUJw.mjs.map +1 -0
- package/dist/auth/index.d.mts +131 -6
- package/dist/auth/index.d.mts.map +1 -1
- package/dist/auth/index.mjs +341 -67
- package/dist/auth/index.mjs.map +1 -1
- package/dist/auth-context-6Li1JkIq.mjs +85 -0
- package/dist/auth-context-6Li1JkIq.mjs.map +1 -0
- package/dist/auth-context-B44CDZCt.d.mts +86 -0
- package/dist/auth-context-B44CDZCt.d.mts.map +1 -0
- package/dist/context/index.d.mts +2 -2
- package/dist/context/index.mjs +2 -2
- package/dist/database/index.d.mts +3 -3
- package/dist/database/index.mjs +54 -46
- package/dist/database/index.mjs.map +1 -1
- package/dist/{decorate-C12QolJF.mjs → decorate-CdfCRvAc.mjs} +1 -1
- package/dist/{decorateMetadata-rWbWGUuO.mjs → decorateMetadata-CqtSx3_1.mjs} +1 -1
- package/dist/decorateParam-Dc5DGEpb.mjs +18 -0
- package/dist/decorateParam-Dc5DGEpb.mjs.map +1 -0
- package/dist/{errors-C_KIIU1v.mjs → errors-B1vVXc1T.mjs} +1 -1
- package/dist/{errors-C_KIIU1v.mjs.map → errors-B1vVXc1T.mjs.map} +1 -1
- package/dist/factory/index.d.mts +1 -1
- package/dist/guards/index.d.mts +7 -6
- package/dist/guards/index.d.mts.map +1 -1
- package/dist/guards/index.mjs +38 -29
- package/dist/guards/index.mjs.map +1 -1
- package/dist/{index-B1iGBJcO.d.mts → index-CCDPF-1Y.d.mts} +30 -42
- package/dist/index-CCDPF-1Y.d.mts.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/insufficient-permissions.error-CRnOHYvq.mjs +23 -0
- package/dist/insufficient-permissions.error-CRnOHYvq.mjs.map +1 -0
- package/dist/types-BLyu9dAd.d.mts +11 -0
- package/dist/types-BLyu9dAd.d.mts.map +1 -0
- package/dist/types-BZlcRR2M.d.mts +92 -0
- package/dist/types-BZlcRR2M.d.mts.map +1 -0
- package/package.json +23 -22
- package/dist/auth-context-BD2ApWg1.d.mts +0 -38
- package/dist/auth-context-BD2ApWg1.d.mts.map +0 -1
- package/dist/auth-context-BfekHvM9.mjs +0 -55
- package/dist/auth-context-BfekHvM9.mjs.map +0 -1
- package/dist/decorateParam-WGqsyT5s.mjs +0 -8
- package/dist/index-B1iGBJcO.d.mts.map +0 -1
- package/dist/rbac/index.d.mts +0 -206
- package/dist/rbac/index.d.mts.map +0 -1
- package/dist/rbac/index.mjs +0 -346
- package/dist/rbac/index.mjs.map +0 -1
- package/dist/tokens-Di1ofovy.mjs +0 -32
- package/dist/tokens-Di1ofovy.mjs.map +0 -1
- package/dist/types-Gjk0d2qB.d.mts +0 -47
- package/dist/types-Gjk0d2qB.d.mts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insufficient-permissions.error-CRnOHYvq.mjs","names":[],"sources":["../src/access-control/errors/insufficient-permissions.error.ts"],"sourcesContent":["import { ApplicationError, ERROR_CODES } from 'stratal/errors'\n\n/**\n * InsufficientPermissionsError\n *\n * Thrown when a user attempts to perform an action without the required permissions.\n * Used by AuthGuard after an authorization check fails.\n *\n * HTTP Status: 403 Forbidden\n */\nexport class InsufficientPermissionsError extends ApplicationError {\n constructor(requiredPermissions: string | string[], userId?: string) {\n const summary = Array.isArray(requiredPermissions)\n ? requiredPermissions.join(', ')\n : requiredPermissions\n super('errors.insufficientPermissions', ERROR_CODES.AUTHZ.INSUFFICIENT_PERMISSIONS, {\n requiredPermissions: summary,\n userId: userId ?? 'unknown',\n })\n }\n}\n"],"mappings":";;;;;;;;;;AAUA,IAAa,+BAAb,cAAkD,iBAAiB;CACjE,YAAY,qBAAwC,QAAiB;EACnE,MAAM,UAAU,MAAM,QAAQ,oBAAoB,GAC9C,oBAAoB,KAAK,KAAK,GAC9B;AACJ,QAAM,kCAAkC,YAAY,MAAM,0BAA0B;GAClF,qBAAqB;GACrB,QAAQ,UAAU;GACnB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AccessControl, Role, Statements } from "better-auth/plugins/access";
|
|
2
|
+
|
|
3
|
+
//#region src/access-control/types.d.ts
|
|
4
|
+
type RolePermissions<TStatements extends Statements> = { [K in keyof TStatements]?: readonly TStatements[K][number][] };
|
|
5
|
+
interface AccessControlOptions<TStatements extends Statements = Statements, TRoles extends Record<string, RolePermissions<TStatements>> = Record<string, RolePermissions<TStatements>>> {
|
|
6
|
+
ac: AccessControl;
|
|
7
|
+
roles: { [K in keyof TRoles]: Role };
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { RolePermissions as n, AccessControlOptions as t };
|
|
11
|
+
//# sourceMappingURL=types-BLyu9dAd.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-BLyu9dAd.d.mts","names":[],"sources":["../src/access-control/types.ts"],"mappings":";;;KAEY,eAAA,qBAAoC,UAAA,kBAClC,WAAA,aAAwB,WAAA,CAAY,CAAA;AAAA,UAGjC,oBAAA,qBAAyC,UAAA,GAAa,UAAA,iBAA2B,MAAA,SAAe,eAAA,CAAgB,WAAA,KAAgB,MAAA,SAAe,eAAA,CAAgB,WAAA;EAC9K,EAAA,EAAI,aAAA;EACJ,KAAA,gBAAqB,MAAA,GAAS,IAAA;AAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { RuntimePlugin } from "@zenstackhq/orm";
|
|
2
|
+
import { SchemaDef } from "@zenstackhq/schema";
|
|
3
|
+
|
|
4
|
+
//#region src/database/types.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Augment with per-connection schemas, default connection, and plugin types.
|
|
7
|
+
*
|
|
8
|
+
* Each property can be augmented in a separate file — TypeScript merges them.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // db/schema.ts
|
|
13
|
+
* declare module '@stratal/framework/database' {
|
|
14
|
+
* interface StratalDatabase {
|
|
15
|
+
* schemas: {
|
|
16
|
+
* main: typeof schema
|
|
17
|
+
* tenant: typeof tenantSchema
|
|
18
|
+
* }
|
|
19
|
+
* defaultConnection: 'main'
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* // db/plugins.ts
|
|
24
|
+
* declare module '@stratal/framework/database' {
|
|
25
|
+
* interface StratalDatabase {
|
|
26
|
+
* plugins: {
|
|
27
|
+
* main: [typeof queryResultPlugin, typeof cachePlugin]
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
interface StratalDatabase {}
|
|
34
|
+
/** Extract `ExtQueryArgs` from a `RuntimePlugin` */
|
|
35
|
+
type ExtractPluginQueryArgs<P> = P extends RuntimePlugin<infer _S, infer Q, infer _M, infer _R> ? Q : {};
|
|
36
|
+
/** Extract `ExtClientMembers` from a `RuntimePlugin` */
|
|
37
|
+
type ExtractPluginClientMembers<P> = P extends RuntimePlugin<infer _S, infer _Q, infer M, infer _R> ? M : {};
|
|
38
|
+
/** Extract `ExtResult` from a `RuntimePlugin` */
|
|
39
|
+
type ExtractPluginResult<P> = P extends RuntimePlugin<infer _S, infer _Q, infer _M, infer R> ? R : {};
|
|
40
|
+
/** Recursively intersect extension types from a tuple of plugins */
|
|
41
|
+
type MergePlugins<Plugins extends unknown[]> = Plugins extends [infer P, ...infer Rest] ? {
|
|
42
|
+
extQueryArgs: ExtractPluginQueryArgs<P> & MergePlugins<Rest>['extQueryArgs'];
|
|
43
|
+
extClientMembers: ExtractPluginClientMembers<P> & MergePlugins<Rest>['extClientMembers'];
|
|
44
|
+
extResult: ExtractPluginResult<P> & MergePlugins<Rest>['extResult'];
|
|
45
|
+
} : {
|
|
46
|
+
extQueryArgs: {};
|
|
47
|
+
extClientMembers: {};
|
|
48
|
+
extResult: {};
|
|
49
|
+
};
|
|
50
|
+
/** Infer merged plugin extensions for a connection */
|
|
51
|
+
type InferConnectionExtensions<K extends string> = StratalDatabase extends {
|
|
52
|
+
plugins: infer P;
|
|
53
|
+
} ? K extends keyof P ? P[K] extends unknown[] ? MergePlugins<P[K]> : {
|
|
54
|
+
extQueryArgs: {};
|
|
55
|
+
extClientMembers: {};
|
|
56
|
+
extResult: {};
|
|
57
|
+
} : {
|
|
58
|
+
extQueryArgs: {};
|
|
59
|
+
extClientMembers: {};
|
|
60
|
+
extResult: {};
|
|
61
|
+
} : {
|
|
62
|
+
extQueryArgs: {};
|
|
63
|
+
extClientMembers: {};
|
|
64
|
+
extResult: {};
|
|
65
|
+
};
|
|
66
|
+
/** Infer schema type for a specific connection */
|
|
67
|
+
type InferConnectionSchema<K extends string> = StratalDatabase extends {
|
|
68
|
+
schemas: infer R;
|
|
69
|
+
} ? K extends keyof R ? R[K] extends SchemaDef ? R[K] : SchemaDef : SchemaDef : SchemaDef;
|
|
70
|
+
/** Union of ALL schemas across connections (for events) */
|
|
71
|
+
type InferAnySchema = StratalDatabase extends {
|
|
72
|
+
schemas: infer R;
|
|
73
|
+
} ? R[keyof R] extends SchemaDef ? R[keyof R] : SchemaDef : SchemaDef;
|
|
74
|
+
/** Connection name — derived from schemas keys */
|
|
75
|
+
type ConnectionName = StratalDatabase extends {
|
|
76
|
+
schemas: infer R;
|
|
77
|
+
} ? keyof R extends never ? string : Extract<keyof R, string> : string;
|
|
78
|
+
/** Default connection name */
|
|
79
|
+
type DefaultConnectionName = StratalDatabase extends {
|
|
80
|
+
defaultConnection: infer N extends string;
|
|
81
|
+
} ? N : string;
|
|
82
|
+
/**
|
|
83
|
+
* Internal context used by database service for dynamic event emission
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
interface InternalDatabaseEventContext {
|
|
87
|
+
data: unknown;
|
|
88
|
+
result?: unknown;
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { InferConnectionSchema as a, InferConnectionExtensions as i, DefaultConnectionName as n, InternalDatabaseEventContext as o, InferAnySchema as r, StratalDatabase as s, ConnectionName as t };
|
|
92
|
+
//# sourceMappingURL=types-BZlcRR2M.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-BZlcRR2M.d.mts","names":[],"sources":["../src/database/types.ts"],"mappings":";;;;;;AA+BA;;;;;AAAmC;;;;;;;;;;;;;;AAIiC;;;;;;;UAJnD,eAAA;;KAGZ,sBAAA,MACH,CAAA,SAAU,aAAA,0CAAuD,CAAA;;KAG9D,0BAAA,MACH,CAAA,SAAU,aAAA,0CAAuD,CAAA;;KAG9D,mBAAA,MACH,CAAA,SAAU,aAAA,0CAAuD,CAAA;;KAG9D,YAAA,8BACH,OAAA;EAEM,YAAA,EAAc,sBAAA,CAAuB,CAAA,IAAK,YAAA,CAAa,IAAA;EACvD,gBAAA,EAAkB,0BAAA,CAA2B,CAAA,IAAK,YAAA,CAAa,IAAA;EAC/D,SAAA,EAAW,mBAAA,CAAoB,CAAA,IAAK,YAAA,CAAa,IAAA;AAAA;EAEjD,YAAA;EAAkB,gBAAA;EAAsB,SAAA;AAAA;;KAGpC,yBAAA,qBACV,eAAA;EAA0B,OAAA;AAAA,IACtB,CAAA,eAAgB,CAAA,GACd,CAAA,CAAE,CAAA,sBACA,YAAA,CAAa,CAAA,CAAE,CAAA;EACb,YAAA;EAAkB,gBAAA;EAAsB,SAAA;AAAA;EAC1C,YAAA;EAAkB,gBAAA;EAAsB,SAAA;AAAA;EAC1C,YAAA;EAAkB,gBAAA;EAAsB,SAAA;AAAA;;KAGpC,qBAAA,qBACV,eAAA;EAA0B,OAAA;AAAA,IACtB,CAAA,eAAgB,CAAA,GAAI,CAAA,CAAE,CAAA,UAAW,SAAA,GAAY,CAAA,CAAE,CAAA,IAAK,SAAA,GAAY,SAAA,GAChE,SAAA;;KAGM,cAAA,GACV,eAAA;EAA0B,OAAA;AAAA,IACtB,CAAA,OAAQ,CAAA,UAAW,SAAA,GAAY,CAAA,OAAQ,CAAA,IAAK,SAAA,GAC5C,SAAA;;KAGM,cAAA,GACV,eAAA;EAA0B,OAAA;AAAA,UAChB,CAAA,0BAA2B,OAAA,OAAc,CAAA;;KAIzC,qBAAA,GACV,eAAA;EAA0B,iBAAA;AAAA,IAA8C,CAAA;;;;;UAMzD,4BAAA;EACf,IAAA;EACA,MAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stratal/framework",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Temitayo Fadojutimi",
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
"types": "./dist/index.d.mts",
|
|
27
27
|
"import": "./dist/index.mjs"
|
|
28
28
|
},
|
|
29
|
+
"./access-control": {
|
|
30
|
+
"types": "./dist/access-control/index.d.mts",
|
|
31
|
+
"import": "./dist/access-control/index.mjs"
|
|
32
|
+
},
|
|
29
33
|
"./auth": {
|
|
30
34
|
"types": "./dist/auth/index.d.mts",
|
|
31
35
|
"import": "./dist/auth/index.mjs"
|
|
@@ -46,10 +50,6 @@
|
|
|
46
50
|
"types": "./dist/guards/index.d.mts",
|
|
47
51
|
"import": "./dist/guards/index.mjs"
|
|
48
52
|
},
|
|
49
|
-
"./rbac": {
|
|
50
|
-
"types": "./dist/rbac/index.d.mts",
|
|
51
|
-
"import": "./dist/rbac/index.mjs"
|
|
52
|
-
},
|
|
53
53
|
"./package.json": "./package.json"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
@@ -67,36 +67,37 @@
|
|
|
67
67
|
"lint:fix": "npx oxlint --fix ."
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@better-auth/core": "^1.
|
|
70
|
+
"@better-auth/core": "^1.6.9",
|
|
71
71
|
"@faker-js/faker": "^10.4.0",
|
|
72
|
-
"@zenstackhq/cli": "^3.
|
|
73
|
-
"@zenstackhq/orm": "^3.
|
|
74
|
-
"better-auth": "^1.
|
|
75
|
-
"
|
|
72
|
+
"@zenstackhq/cli": "^3.6.4",
|
|
73
|
+
"@zenstackhq/orm": "^3.6.4",
|
|
74
|
+
"better-auth": "^1.6.9",
|
|
75
|
+
"better-call": "1.3.5",
|
|
76
76
|
"postgres-array": "^3.0.4"
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
79
|
"pg": "^8.0.0",
|
|
80
80
|
"reflect-metadata": "^0.2.2",
|
|
81
|
-
"stratal": "^0.0.
|
|
81
|
+
"stratal": "^0.0.20"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
|
-
"@cloudflare/vitest-pool-workers": "^0.
|
|
85
|
-
"@cloudflare/workers-types": "4.
|
|
84
|
+
"@cloudflare/vitest-pool-workers": "^0.15.2",
|
|
85
|
+
"@cloudflare/workers-types": "4.20260502.1",
|
|
86
86
|
"@stratal/testing": "workspace:^",
|
|
87
|
-
"@types/node": "^25.
|
|
87
|
+
"@types/node": "^25.6.0",
|
|
88
88
|
"@types/pg": "^8.20.0",
|
|
89
|
-
"@vitest/coverage-istanbul": "~4.1.
|
|
90
|
-
"@vitest/runner": "~4.1.
|
|
91
|
-
"@vitest/snapshot": "~4.1.
|
|
92
|
-
"@zenstackhq/better-auth": "^3.
|
|
89
|
+
"@vitest/coverage-istanbul": "~4.1.5",
|
|
90
|
+
"@vitest/runner": "~4.1.5",
|
|
91
|
+
"@vitest/snapshot": "~4.1.5",
|
|
92
|
+
"@zenstackhq/better-auth": "^3.6.4",
|
|
93
93
|
"dotenv-cli": "^11.0.0",
|
|
94
|
+
"kysely": "0.28.16",
|
|
94
95
|
"pg": "^8.20.0",
|
|
95
96
|
"reflect-metadata": "^0.2.2",
|
|
96
97
|
"stratal": "workspace:*",
|
|
97
|
-
"tsdown": "^0.21.
|
|
98
|
-
"typescript": "^6.0.
|
|
99
|
-
"vitest": "~4.1.
|
|
100
|
-
"wrangler": "^4.
|
|
98
|
+
"tsdown": "^0.21.10",
|
|
99
|
+
"typescript": "^6.0.3",
|
|
100
|
+
"vitest": "~4.1.5",
|
|
101
|
+
"wrangler": "^4.87.0"
|
|
101
102
|
}
|
|
102
103
|
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
//#region src/context/auth-context.d.ts
|
|
2
|
-
interface AuthInfo {
|
|
3
|
-
userId?: string;
|
|
4
|
-
}
|
|
5
|
-
declare class AuthContext {
|
|
6
|
-
protected userId?: string;
|
|
7
|
-
/**
|
|
8
|
-
* Set authentication context.
|
|
9
|
-
* This should be called once per request with user information.
|
|
10
|
-
*/
|
|
11
|
-
setAuthContext(info: AuthInfo): void;
|
|
12
|
-
/**
|
|
13
|
-
* Get user ID if available.
|
|
14
|
-
* Returns undefined if no user is authenticated.
|
|
15
|
-
*/
|
|
16
|
-
getUserId(): string | undefined;
|
|
17
|
-
/**
|
|
18
|
-
* Get user ID or throw if not authenticated.
|
|
19
|
-
* Use this when authentication is required.
|
|
20
|
-
*/
|
|
21
|
-
requireUserId(): string;
|
|
22
|
-
/**
|
|
23
|
-
* Get full authentication context or throw if not initialized.
|
|
24
|
-
*/
|
|
25
|
-
getAuthContext(): AuthInfo;
|
|
26
|
-
/**
|
|
27
|
-
* Check if user is authenticated.
|
|
28
|
-
*/
|
|
29
|
-
isAuthenticated(): boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Clear authentication context.
|
|
32
|
-
* Useful for testing or cleanup.
|
|
33
|
-
*/
|
|
34
|
-
clearAuthContext(): void;
|
|
35
|
-
}
|
|
36
|
-
//#endregion
|
|
37
|
-
export { AuthInfo as n, AuthContext as t };
|
|
38
|
-
//# sourceMappingURL=auth-context-BD2ApWg1.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-context-BD2ApWg1.d.mts","names":[],"sources":["../src/context/auth-context.ts"],"mappings":";UAMiB,QAAA;EACf,MAAA;AAAA;AAAA,cAIW,WAAA;EAAA,UACD,MAAA;EALJ;AAGR;;;EAQE,cAAA,CAAe,IAAA,EAAM,QAAA;EANX;;;;EAcV,SAAA,CAAA;EAQA;;;;EAAA,aAAA,CAAA;EA+BgB;;;EApBhB,cAAA,CAAA,GAAkB,QAAA;;;;EAYlB,eAAA,CAAA;;;;;EAQA,gBAAA,CAAA;AAAA"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { n as UserNotAuthenticatedError, r as ContextNotInitializedError } from "./errors-C_KIIU1v.mjs";
|
|
2
|
-
import { t as __decorate } from "./decorate-C12QolJF.mjs";
|
|
3
|
-
import { DI_TOKENS, Transient } from "stratal/di";
|
|
4
|
-
//#region src/context/auth-context.ts
|
|
5
|
-
let AuthContext = class AuthContext {
|
|
6
|
-
userId;
|
|
7
|
-
/**
|
|
8
|
-
* Set authentication context.
|
|
9
|
-
* This should be called once per request with user information.
|
|
10
|
-
*/
|
|
11
|
-
setAuthContext(info) {
|
|
12
|
-
this.userId = info.userId;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Get user ID if available.
|
|
16
|
-
* Returns undefined if no user is authenticated.
|
|
17
|
-
*/
|
|
18
|
-
getUserId() {
|
|
19
|
-
return this.userId;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Get user ID or throw if not authenticated.
|
|
23
|
-
* Use this when authentication is required.
|
|
24
|
-
*/
|
|
25
|
-
requireUserId() {
|
|
26
|
-
const userId = this.getUserId();
|
|
27
|
-
if (!userId) throw new UserNotAuthenticatedError();
|
|
28
|
-
return userId;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Get full authentication context or throw if not initialized.
|
|
32
|
-
*/
|
|
33
|
-
getAuthContext() {
|
|
34
|
-
if (!this.userId) throw new ContextNotInitializedError("Authentication");
|
|
35
|
-
return { userId: this.userId };
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Check if user is authenticated.
|
|
39
|
-
*/
|
|
40
|
-
isAuthenticated() {
|
|
41
|
-
return !!this.userId;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Clear authentication context.
|
|
45
|
-
* Useful for testing or cleanup.
|
|
46
|
-
*/
|
|
47
|
-
clearAuthContext() {
|
|
48
|
-
this.userId = void 0;
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
AuthContext = __decorate([Transient(DI_TOKENS.AuthContext)], AuthContext);
|
|
52
|
-
//#endregion
|
|
53
|
-
export { AuthContext as t };
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=auth-context-BfekHvM9.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-context-BfekHvM9.mjs","names":[],"sources":["../src/context/auth-context.ts"],"sourcesContent":["import { Transient, DI_TOKENS } from 'stratal/di'\nimport {\n ContextNotInitializedError,\n UserNotAuthenticatedError\n} from './errors'\n\nexport interface AuthInfo {\n userId?: string\n}\n\n@Transient(DI_TOKENS.AuthContext)\nexport class AuthContext {\n protected userId?: string\n\n /**\n * Set authentication context.\n * This should be called once per request with user information.\n */\n setAuthContext(info: AuthInfo): void {\n this.userId = info.userId\n }\n\n /**\n * Get user ID if available.\n * Returns undefined if no user is authenticated.\n */\n getUserId(): string | undefined {\n return this.userId\n }\n\n /**\n * Get user ID or throw if not authenticated.\n * Use this when authentication is required.\n */\n requireUserId(): string {\n const userId = this.getUserId()\n if (!userId) {\n throw new UserNotAuthenticatedError()\n }\n return userId\n }\n\n /**\n * Get full authentication context or throw if not initialized.\n */\n getAuthContext(): AuthInfo {\n if (!this.userId) {\n throw new ContextNotInitializedError('Authentication')\n }\n return {\n userId: this.userId\n }\n }\n\n /**\n * Check if user is authenticated.\n */\n isAuthenticated(): boolean {\n return !!this.userId\n }\n\n /**\n * Clear authentication context.\n * Useful for testing or cleanup.\n */\n clearAuthContext(): void {\n this.userId = undefined\n }\n}\n"],"mappings":";;;;AAWO,IAAA,cAAA,MAAM,YAAY;CACvB;;;;;CAMA,eAAe,MAAsB;AACnC,OAAK,SAAS,KAAK;;;;;;CAOrB,YAAgC;AAC9B,SAAO,KAAK;;;;;;CAOd,gBAAwB;EACtB,MAAM,SAAS,KAAK,WAAW;AAC/B,MAAI,CAAC,OACH,OAAM,IAAI,2BAA2B;AAEvC,SAAO;;;;;CAMT,iBAA2B;AACzB,MAAI,CAAC,KAAK,OACR,OAAM,IAAI,2BAA2B,iBAAiB;AAExD,SAAO,EACL,QAAQ,KAAK,QACd;;;;;CAMH,kBAA2B;AACzB,SAAO,CAAC,CAAC,KAAK;;;;;;CAOhB,mBAAyB;AACvB,OAAK,SAAS,KAAA;;;0BAxDjB,UAAU,UAAU,YAAY,CAAA,EAAA,YAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-B1iGBJcO.d.mts","names":[],"sources":["../src/database/database.module.ts","../src/database/database.service.ts","../src/database/database.tokens.ts","../src/database/decorators/inject-db.decorator.ts","../src/database/errors/database-error.ts","../src/database/errors/database-config.error.ts","../src/database/errors/foreign-key-constraint.error.ts","../src/database/errors/invalid-error-code-range.error.ts","../src/database/errors/record-not-found.error.ts","../src/database/errors/unique-constraint.error.ts","../src/database/errors/from-zenstack-error.ts","../src/database/event-types.ts","../src/database/i18n/en.ts","../src/database/plugins/error-handler.plugin.ts","../src/database/plugins/event-emitter.plugin.ts","../src/database/plugins/schema-switcher.plugin.ts","../src/database/commands/zenstack.command.ts","../src/database/commands/db-generate.command.ts","../src/database/commands/db-pull.command.ts","../src/database/commands/db-push.command.ts","../src/database/commands/migrate-deploy.command.ts","../src/database/commands/migrate-dev.command.ts","../src/database/commands/migrate-reset.command.ts","../src/database/commands/migrate-status.command.ts"],"mappings":";;;;;;;;;;;UAwBiB,wBAAA,gBACA,SAAA,GAAY,SAAA,eACd,cAAA,GAAiB,cAAA;EAE9B,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,MAAA;EACR,OAAA,QAAe,aAAA,CAAc,SAAA;EAC7B,OAAA,GAAU,SAAA;AAAA;AAAA,UAGK,oBAAA;EACf,OAAA,EAAS,qBAAA;EACT,WAAA,EAAa,wBAAA;AAAA;AAAA,cAcF,cAAA,YAA0B,YAAA,EAAc,UAAA;EAAA,OAC5C,OAAA,CAAQ,MAAA,EAAQ,oBAAA,GAAuB,aAAA;EAAA,OASvC,YAAA,CAAa,OAAA,EAAS,kBAAA,CAAmB,oBAAA,IAAwB,aAAA;EAaxE,YAAA,CAAa,OAAA,EAAS,aAAA;EAmBtB,UAAA,CAAW,OAAA,EAAS,aAAA;AAAA;;;;;;;;;;;;AApEtB;;;;;KCPY,eAAA,WACA,cAAA,GAAiB,qBAAA,IACzB,cAAA,CACF,qBAAA,CAAsB,CAAA,GACtB,aAAA,CAAc,qBAAA,CAAsB,CAAA;;;cCrBzB,eAAA;EAAA,SAGH,OAAA;EAAA,SAAA,QAAA;AAAA;AAAA,iBAIM,gBAAA,CAAiB,IAAA,EAAM,cAAA;;;iBCHvB,QAAA,CAAS,IAAA,EAAM,cAAA,GAAiB,kBAAA;;;;;;;;;;;cCQnC,aAAA,SAAsB,gBAAA;cAE/B,UAAA,GAAY,WAAA,EACZ,IAAA,GAAM,SAAA,EACN,QAAA,GAAW,MAAA;AAAA;;;cCbF,mBAAA,SAA4B,aAAA;cAC3B,OAAA;AAAA;;;;;;;;;;;;cCQD,yBAAA,SAAkC,aAAA;cACjC,KAAA;AAAA;;;;;;;;;;cCJD,0BAAA,SAAmC,gBAAA;cAClC,IAAA,UAAc,aAAA;AAAA;;;;;;;;;;;;;cCGf,mBAAA,SAA4B,aAAA;cAC3B,OAAA;AAAA;;;;;;;;;;;;;cCDD,qBAAA,SAA8B,aAAA;cAC7B,MAAA;AAAA;;;;;;;;;;;;;ATUd;;;;;;;;;iBUEgB,iBAAA,CAAkB,KAAA,YAAiB,aAAA;;;;;;KCavC,UAAA;;;;KAKA,iBAAA,GAAoB,iBAAA;;;;;;KAO3B,kBAAA,MAAwB,CAAA;EAAY,MAAA;AAAA,IAAoB,OAAA,OAAc,CAAA;;;;;KAM/D,SAAA,GAAY,kBAAA,CAAmB,cAAA;;;;KAS/B,iBAAA,MACL,UAAA,IAAc,SAAA,IAAa,iBAAA,QAC3B,UAAA,IAAc,SAAA,QACd,UAAA,IAAc,iBAAA,KACjB,UAAA;;;;KASC,gBAAA,WACO,SAAA,YACA,OAAA,OAAc,CAAA,+BACd,iBAAA,IAEV,CAAA,oBAAqB,UAAA,CAAW,CAAA,EAAG,CAAA,IACnC,CAAA,wBAAyB,cAAA,CAAe,CAAA,EAAG,CAAA,IAC3C,CAAA,oBAAqB,UAAA,CAAW,CAAA,EAAG,CAAA,IACnC,CAAA,wBAAyB,cAAA,CAAe,CAAA,EAAG,CAAA,IAC3C,CAAA,oBAAqB,UAAA,CAAW,CAAA,EAAG,CAAA,IACnC,CAAA,wBAAyB,cAAA,CAAe,CAAA,EAAG,CAAA,IAC3C,CAAA,wBAAyB,cAAA,CAAe,CAAA,EAAG,CAAA,IAC3C,CAAA,uBAAwB,aAAA,CAAc,CAAA,EAAG,CAAA,IACzC,CAAA,sBAAuB,YAAA,CAAa,CAAA,EAAG,CAAA,IACvC,CAAA,oBAAqB,UAAA,CAAW,CAAA,EAAG,CAAA,IACnC,CAAA,mBAAoB,SAAA,CAAU,CAAA,EAAG,CAAA,IACjC,CAAA,uBAAwB,aAAA,CAAc,CAAA,EAAG,CAAA,IACzC,CAAA,qBAAsB,WAAA,CAAY,CAAA,EAAG,CAAA;;;;KAMlC,YAAA,gCAA4C,iBAAA,IAC/C,CAAA,SAAU,SAAA,GACR,CAAA,SAAU,OAAA,OAAc,CAAA,sBACxB,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,CAAA;EAAa,IAAA;AAAA,IACpC,CAAA,GACA,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,CAAA;EAAa,KAAA;AAAA,IACpC,CAAA,GACA,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,CAAA;;AXtE3B;;;KW8EY,OAAA,WAAkB,SAAA,YAAqB,iBAAA,IACjD,YAAA,CAAa,cAAA,EAAgB,CAAA,EAAG,CAAA,4BAA6B,YAAA,CAAa,cAAA,EAAgB,CAAA,EAAG,CAAA;;;;KAK1F,cAAA,gCAA8C,iBAAA,IACjD,CAAA,SAAU,SAAA,GACR,CAAA,SAAU,OAAA,OAAc,CAAA,sBACxB,CAAA,mEACA,WAAA,CAAY,CAAA,EAAG,CAAA,MACf,CAAA,4BAEA,WAAA,CAAY,CAAA,EAAG,CAAA;;;;;KAQP,SAAA,WAAoB,SAAA,YAAqB,iBAAA,IACnD,cAAA,CAAe,cAAA,EAAgB,CAAA,EAAG,CAAA,4BAA6B,cAAA,CAAe,cAAA,EAAgB,CAAA,EAAG,CAAA;;;;KASvF,UAAA,qBACV,CAAA,gCAAiC,UAAA,wBAAkC,SAAA,qBAA8B,iBAAA;EAC7F,KAAA,EAAO,KAAA;EAAO,KAAA,EAAO,KAAA;EAAO,SAAA,EAAW,EAAA;EAAI,IAAA;AAAA,IAC7C,CAAA,gCAAiC,UAAA,qBACjC,MAAA,SAAe,SAAA;EACb,KAAA,EAAO,KAAA;EAAO,KAAA,EAAO,MAAA;EAAQ,IAAA;AAAA,IAC/B,MAAA,SAAe,iBAAA;EACb,KAAA,EAAO,KAAA;EAAO,SAAA,EAAW,MAAA;EAAQ,IAAA;AAAA,YAEnC,CAAA,SAAU,UAAA;EACR,KAAA,EAAO,CAAA;EAAG,IAAA;AAAA;;UAQN,gBAAA;AVrJV;AAAA,UUyJU,yBAAA,WACE,SAAA,YACA,iBAAA,gBACI,UAAA,UACN,gBAAA;EACR,IAAA,EAAM,KAAA,oBAAyB,OAAA,CAAQ,CAAA,EAAG,CAAA,IAAK,QAAA,CAAS,OAAA,CAAQ,CAAA,EAAG,CAAA;EACnE,MAAA,EAAQ,KAAA,mBAAwB,SAAA,CAAU,CAAA,EAAG,CAAA;AAAA;;UAIrC,yBAAA,eACM,UAAA,UACN,gBAAA;EACR,SAAA,EAAW,iBAAA;EACX,IAAA,EAAM,KAAA,8BAAmC,QAAA;EACzC,MAAA,EAAQ,KAAA;AAAA;;UAIA,6BAAA,eACM,UAAA,UACN,gBAAA;EACR,KAAA,EAAO,SAAA;EACP,IAAA,EAAM,KAAA,8BAAmC,QAAA;EACzC,MAAA,EAAQ,KAAA;AAAA;;UAIA,yBAAA,eACM,UAAA,UACN,gBAAA;EACR,KAAA,EAAO,SAAA;EACP,SAAA,EAAW,iBAAA;EACX,IAAA,EAAM,KAAA,8BAAmC,QAAA;EACzC,MAAA,EAAQ,KAAA;AAAA;;;;KAUL,oBAAA,qBACH,UAAA,CAAW,CAAA;EACT,KAAA,kBAAuB,UAAA;EACvB,KAAA,kBAAuB,SAAA;EACvB,SAAA,kBAA2B,iBAAA;EAC3B,IAAA;AAAA,IAEA,yBAAA,CAA0B,CAAA,EAAG,CAAA,EAAG,CAAA,IAChC,UAAA,CAAW,CAAA;EACX,KAAA,kBAAuB,UAAA;EACvB,KAAA,mBAAwB,SAAA;EACxB,IAAA;AAAA,IAEA,yBAAA,CAA0B,CAAA,IAC1B,UAAA,CAAW,CAAA;EACX,KAAA,kBAAuB,UAAA;EACvB,SAAA,mBAA4B,iBAAA;EAC5B,IAAA;AAAA,IAEA,6BAAA,CAA8B,CAAA,IAC9B,UAAA,CAAW,CAAA;EAAa,KAAA,kBAAuB,UAAA;EAAY,IAAA;AAAA,IAC3D,yBAAA,CAA0B,CAAA,IAC1B,gBAAA;;;;;;;;;APhOJ;;;;KOkPY,cAAA,WACJ,iBAAA,GAAoB,oBAAA,CAAqB,CAAA;AAAA;EAAA,UAQrC,mBAAA,SAA4B,cAAA;AAAA;;;cCvQ3B,YAAA;EAAA;;;;;;;;;YAWD,WAAA;IACR,QAAA,SAAiB,YAAA;EAAA;AAAA;;;;;;;;;;;;AZYrB;;caTa,kBAAA,YAA8B,aAAA,CAAc,WAAA,EAAW,MAAA,mBAAyB,MAAA;EAAA,SAClF,EAAA;EAET,OAAA;IAAiB,IAAA;IAAA;EAAA;IACf,IAAA,EAAM,MAAA;IACN,OAAA,GAAU,IAAA,EAAM,MAAA,kCAAwC,OAAA;EAAA,MACtD,OAAA;AAAA;;;UCjBW,yBAAA;EACf,aAAA,EAAe,cAAA;AAAA;;;;;;AdmBjB;;;;;;;;;;;;;;ccGa,kBAAA,YAA8B,aAAA,CAAc,WAAA,EAAW,MAAA,mBAAyB,MAAA;EAAA,QAGvE,OAAA;EAAA,SAFX,EAAA;cAEW,OAAA,EAAS,yBAAA;EAE7B,OAAA;IAAiB,KAAA;IAAA,SAAA;IAAA,IAAA;IAAA;EAAA;IACf,KAAA;IACA,SAAA;IACA,IAAA,EAAM,MAAA;IACN,OAAA,GAAU,IAAA,EAAM,MAAA,kCAAwC,OAAA;EAAA,MACtD,OAAA;AAAA;;;UClCW,2BAAA;EACf,UAAA;AAAA;;;;;;;AfoBF;;;;;;;;ceHa,oBAAA,YAAgC,aAAA,CAAc,WAAA,EAAW,MAAA,mBAAyB,MAAA;EAAA,QAGzE,OAAA;EAAA,SAFX,EAAA;cAEW,OAAA,EAAS,2BAAA;EAE7B,OAAA;IAAiB,IAAA;IAAA,OAAA;IAAA;EAAA;IACf,IAAA,EAAM,MAAA;IACN,OAAA,GAAU,IAAA,EAAM,MAAA,kCAAwC,OAAA;IACxD,MAAA;MAAU,iBAAA,GAAoB,GAAA,aAAgB,OAAA;IAAA;EAAA,MAC5C,OAAA;AAAA;;;;;;;uBCxBgB,eAAA,SAAwB,OAAA;EAAA,UAC5B,QAAA,CAAS,IAAA,aAAiB,OAAA;AAAA;;;cCL/B,iBAAA,SAA0B,eAAA;EAAA,OAC9B,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,aAAA,SAAsB,eAAA;EAAA,OAC1B,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,aAAA,SAAsB,eAAA;EAAA,OAC1B,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,oBAAA,SAA6B,eAAA;EAAA,OACjC,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,iBAAA,SAA0B,eAAA;EAAA,OAC9B,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,mBAAA,SAA4B,eAAA;EAAA,OAChC,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,oBAAA,SAA6B,eAAA;EAAA,OACjC,OAAA;EAAA,OACA,WAAA;EAED,MAAA,CAAA,GAAU,OAAA;AAAA"}
|
package/dist/rbac/index.d.mts
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { t as AuthContext } from "../auth-context-BD2ApWg1.mjs";
|
|
2
|
-
import { AsyncModuleOptions, DynamicModule } from "stratal/module";
|
|
3
|
-
import { ApplicationError } from "stratal/errors";
|
|
4
|
-
import { Adapter, Enforcer, Model } from "casbin";
|
|
5
|
-
|
|
6
|
-
//#region src/rbac/constants.d.ts
|
|
7
|
-
/**
|
|
8
|
-
* RBAC Constants
|
|
9
|
-
*/
|
|
10
|
-
declare const RBAC_CONTEXT_KEYS: {
|
|
11
|
-
/** Key for storing required authorization scopes (permissions) in context */readonly AUTH_SCOPES: symbol;
|
|
12
|
-
};
|
|
13
|
-
//#endregion
|
|
14
|
-
//#region src/rbac/errors/insufficient-permissions.error.d.ts
|
|
15
|
-
/**
|
|
16
|
-
* InsufficientPermissionsError
|
|
17
|
-
*
|
|
18
|
-
* Thrown when a user attempts to perform an action without the required permissions.
|
|
19
|
-
* This error is used by the auth guard after authorization check fails.
|
|
20
|
-
*
|
|
21
|
-
* HTTP Status: 403 Forbidden
|
|
22
|
-
* Error Code: 3102 (AUTHZ.INSUFFICIENT_PERMISSIONS)
|
|
23
|
-
*/
|
|
24
|
-
declare class InsufficientPermissionsError extends ApplicationError {
|
|
25
|
-
constructor(requiredScopes: string[], userId?: string);
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/rbac/adapters/custom-zenstack-adapter.d.ts
|
|
29
|
-
/**
|
|
30
|
-
* Minimal interface for the database client used by the adapter.
|
|
31
|
-
* The actual DatabaseService extends ZenStackClient which provides these methods
|
|
32
|
-
* when the schema includes a `casbinRule` model.
|
|
33
|
-
*/
|
|
34
|
-
interface CasbinDbClient {
|
|
35
|
-
casbinRule: {
|
|
36
|
-
findMany(args?: {
|
|
37
|
-
where?: Record<string, unknown>;
|
|
38
|
-
}): Promise<unknown[]>;
|
|
39
|
-
create(args: {
|
|
40
|
-
data: CasbinRuleCreateInput;
|
|
41
|
-
}): Promise<unknown>;
|
|
42
|
-
createMany(args: {
|
|
43
|
-
data: CasbinRuleCreateInput[];
|
|
44
|
-
}): Promise<unknown>;
|
|
45
|
-
deleteMany(args: {
|
|
46
|
-
where: CasbinRuleCreateInput;
|
|
47
|
-
}): Promise<{
|
|
48
|
-
count: number;
|
|
49
|
-
}>;
|
|
50
|
-
};
|
|
51
|
-
$executeRawUnsafe(query: string, ...values: unknown[]): Promise<unknown>;
|
|
52
|
-
}
|
|
53
|
-
interface CasbinRuleCreateInput {
|
|
54
|
-
ptype: string;
|
|
55
|
-
v0?: string | null;
|
|
56
|
-
v1?: string | null;
|
|
57
|
-
v2?: string | null;
|
|
58
|
-
v3?: string | null;
|
|
59
|
-
v4?: string | null;
|
|
60
|
-
v5?: string | null;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Custom ZenStack adapter for Casbin that works with Cloudflare Workers.
|
|
64
|
-
*
|
|
65
|
-
* Based on the original casbin-prisma-adapter but modified to:
|
|
66
|
-
* - Work with ZenStack v3 ORM clients
|
|
67
|
-
* - Avoid bundling errors in Cloudflare Workers
|
|
68
|
-
* - Accept pre-connected ZenStack clients (request-scoped)
|
|
69
|
-
*/
|
|
70
|
-
declare class CustomZenStackAdapter implements Adapter {
|
|
71
|
-
#private;
|
|
72
|
-
filtered: boolean;
|
|
73
|
-
isFiltered(): boolean;
|
|
74
|
-
enableFiltered(enabled: boolean): void;
|
|
75
|
-
constructor(db: CasbinDbClient);
|
|
76
|
-
loadPolicy(model: Model): Promise<void>;
|
|
77
|
-
loadFilteredPolicy(model: Model, filter: Record<string, string[][]>): Promise<void>;
|
|
78
|
-
savePolicy(model: Model): Promise<boolean>;
|
|
79
|
-
addPolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
|
|
80
|
-
addPolicies(_sec: string, ptype: string, rules: string[][]): Promise<void>;
|
|
81
|
-
removePolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
|
|
82
|
-
removePolicies(_sec: string, ptype: string, rules: string[][]): Promise<void>;
|
|
83
|
-
removeFilteredPolicy(_sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void>;
|
|
84
|
-
close(): Promise<void>;
|
|
85
|
-
static newAdapter(db: CasbinDbClient): CustomZenStackAdapter;
|
|
86
|
-
}
|
|
87
|
-
//#endregion
|
|
88
|
-
//#region src/rbac/types.d.ts
|
|
89
|
-
/**
|
|
90
|
-
* Configuration options for the RBAC module
|
|
91
|
-
*/
|
|
92
|
-
interface RbacModuleOptions {
|
|
93
|
-
/** Casbin PERM model string */
|
|
94
|
-
model: string;
|
|
95
|
-
/** Default policies: [role, resource, action][] */
|
|
96
|
-
defaultPolicies?: readonly (readonly [string, string, string])[];
|
|
97
|
-
/** Role hierarchy: [childRole, parentRole][] */
|
|
98
|
-
roleHierarchy?: readonly (readonly [string, string])[];
|
|
99
|
-
}
|
|
100
|
-
//#endregion
|
|
101
|
-
//#region src/rbac/services/casbin-enforcer.service.d.ts
|
|
102
|
-
/**
|
|
103
|
-
* CasbinEnforcerService
|
|
104
|
-
*
|
|
105
|
-
* Manages the Casbin enforcer instance for authorization.
|
|
106
|
-
* Model, default policies, and role hierarchy are provided via DI options.
|
|
107
|
-
*/
|
|
108
|
-
declare class CasbinEnforcerService {
|
|
109
|
-
protected readonly db: CasbinDbClient;
|
|
110
|
-
protected readonly options: RbacModuleOptions;
|
|
111
|
-
protected enforcer: Enforcer | null;
|
|
112
|
-
constructor(db: CasbinDbClient, options: RbacModuleOptions);
|
|
113
|
-
/**
|
|
114
|
-
* Get or create the enforcer instance
|
|
115
|
-
*/
|
|
116
|
-
getEnforcer(): Promise<Enforcer>;
|
|
117
|
-
/**
|
|
118
|
-
* Create a new enforcer instance.
|
|
119
|
-
* Can be overridden by subclasses to customize enforcer creation.
|
|
120
|
-
*/
|
|
121
|
-
protected createEnforcer(): Promise<Enforcer>;
|
|
122
|
-
/**
|
|
123
|
-
* Seed default policies into database
|
|
124
|
-
*/
|
|
125
|
-
seedPolicies(): Promise<void>;
|
|
126
|
-
/**
|
|
127
|
-
* Clear cached enforcer instance
|
|
128
|
-
*/
|
|
129
|
-
clearCache(): void;
|
|
130
|
-
/**
|
|
131
|
-
* Seed role hierarchy into database
|
|
132
|
-
*/
|
|
133
|
-
seedRoleHierarchy(): Promise<void>;
|
|
134
|
-
}
|
|
135
|
-
//#endregion
|
|
136
|
-
//#region src/rbac/services/casbin.service.d.ts
|
|
137
|
-
/**
|
|
138
|
-
* CasbinService
|
|
139
|
-
*
|
|
140
|
-
* Request-scoped service that provides the full Casbin RBAC API.
|
|
141
|
-
* Uses AuthContext to get the current user.
|
|
142
|
-
*/
|
|
143
|
-
declare class CasbinService {
|
|
144
|
-
protected readonly context: AuthContext;
|
|
145
|
-
protected readonly enforcerService: CasbinEnforcerService;
|
|
146
|
-
constructor(context: AuthContext, enforcerService: CasbinEnforcerService);
|
|
147
|
-
protected getEnforcer(): Promise<Enforcer>;
|
|
148
|
-
addRoleForUser(userId: string, role: string): Promise<boolean>;
|
|
149
|
-
deleteRoleForUser(userId: string, role: string): Promise<boolean>;
|
|
150
|
-
deleteRolesForUser(userId: string): Promise<boolean>;
|
|
151
|
-
getRolesForUser(userId: string): Promise<string[]>;
|
|
152
|
-
getImplicitRolesForUser(userId: string): Promise<string[]>;
|
|
153
|
-
getUsersForRole(role: string): Promise<string[]>;
|
|
154
|
-
getImplicitUsersForRole(role: string): Promise<string[]>;
|
|
155
|
-
hasRoleForUser(userId: string, role: string): Promise<boolean>;
|
|
156
|
-
addRoleInheritance(childRole: string, parentRole: string): Promise<boolean>;
|
|
157
|
-
deleteRoleInheritance(childRole: string, parentRole: string): Promise<boolean>;
|
|
158
|
-
deleteUser(userId: string): Promise<boolean>;
|
|
159
|
-
deleteRole(role: string): Promise<boolean>;
|
|
160
|
-
getCurrentUserRoles(): Promise<string[]>;
|
|
161
|
-
currentUserHasRole(role: string): Promise<boolean>;
|
|
162
|
-
setRolesForUser(userId: string, roles: string[]): Promise<void>;
|
|
163
|
-
hasPermission(userId: string, scope: string, action: string): Promise<boolean>;
|
|
164
|
-
currentUserHasPermission(scope: string, action: string): Promise<boolean>;
|
|
165
|
-
hasAnyPermission(userId: string, scopes: string[], action: string): Promise<boolean>;
|
|
166
|
-
currentUserHasAnyPermission(scopes: string[], action: string): Promise<boolean>;
|
|
167
|
-
getPermissionsForUserAsCasbinJs(userId: string): Promise<Record<string, string[]>>;
|
|
168
|
-
getCurrentUserPermissionsAsCasbinJs(): Promise<Record<string, string[]>>;
|
|
169
|
-
}
|
|
170
|
-
//#endregion
|
|
171
|
-
//#region src/rbac/rbac.module.d.ts
|
|
172
|
-
/**
|
|
173
|
-
* RBAC Module
|
|
174
|
-
*
|
|
175
|
-
* Provides role-based access control using Casbin.
|
|
176
|
-
* Fully configurable — no hardcoded roles, policies, or model.
|
|
177
|
-
*
|
|
178
|
-
* @example
|
|
179
|
-
* ```typescript
|
|
180
|
-
* @Module({
|
|
181
|
-
* imports: [
|
|
182
|
-
* RbacModule.forRoot({
|
|
183
|
-
* model: MY_RBAC_MODEL,
|
|
184
|
-
* defaultPolicies: [['admin', 'users:*', '.*']],
|
|
185
|
-
* roleHierarchy: [['super_admin', 'admin']],
|
|
186
|
-
* })
|
|
187
|
-
* ]
|
|
188
|
-
* })
|
|
189
|
-
* ```
|
|
190
|
-
*/
|
|
191
|
-
declare class RbacModule {
|
|
192
|
-
static forRoot(options: RbacModuleOptions): DynamicModule;
|
|
193
|
-
static forRootAsync(options: AsyncModuleOptions<RbacModuleOptions>): DynamicModule;
|
|
194
|
-
}
|
|
195
|
-
//#endregion
|
|
196
|
-
//#region src/rbac/tokens.d.ts
|
|
197
|
-
/**
|
|
198
|
-
* RBAC DI Tokens
|
|
199
|
-
*/
|
|
200
|
-
declare const RBAC_TOKENS: {
|
|
201
|
-
/** Request-scoped Casbin service with auto context resolution */readonly CasbinService: symbol; /** RBAC module options (model, policies, hierarchy) */
|
|
202
|
-
readonly Options: symbol;
|
|
203
|
-
};
|
|
204
|
-
//#endregion
|
|
205
|
-
export { CasbinEnforcerService, CasbinService, CustomZenStackAdapter, InsufficientPermissionsError, RBAC_CONTEXT_KEYS, RBAC_TOKENS, RbacModule, type RbacModuleOptions };
|
|
206
|
-
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/rbac/constants.ts","../../src/rbac/errors/insufficient-permissions.error.ts","../../src/rbac/adapters/custom-zenstack-adapter.ts","../../src/rbac/types.ts","../../src/rbac/services/casbin-enforcer.service.ts","../../src/rbac/services/casbin.service.ts","../../src/rbac/rbac.module.ts","../../src/rbac/tokens.ts"],"mappings":"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"}
|