@spinajs/rbac 2.0.480 → 2.0.482
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/lib/cjs/actions.d.ts.map +1 -1
- package/lib/cjs/actions.js +32 -6
- package/lib/cjs/actions.js.map +1 -1
- package/lib/cjs/cli/ActivateUser.js +1 -1
- package/lib/cjs/cli/ActivateUser.js.map +1 -1
- package/lib/cjs/cli/BanUser.js +1 -1
- package/lib/cjs/cli/BanUser.js.map +1 -1
- package/lib/cjs/config/rbac.d.ts +11 -1
- package/lib/cjs/config/rbac.d.ts.map +1 -1
- package/lib/cjs/config/rbac.js +12 -3
- package/lib/cjs/config/rbac.js.map +1 -1
- package/lib/cjs/cron/DeactivatePasswords.d.ts.map +1 -1
- package/lib/cjs/cron/DeactivatePasswords.js +6 -2
- package/lib/cjs/cron/DeactivatePasswords.js.map +1 -1
- package/lib/cjs/index.d.ts +6 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +6 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +63 -37
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js +43 -1
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/middleware.d.ts +23 -1
- package/lib/cjs/middleware.d.ts.map +1 -1
- package/lib/cjs/middleware.js +158 -104
- package/lib/cjs/middleware.js.map +1 -1
- package/lib/cjs/models/User.d.ts.map +1 -1
- package/lib/cjs/models/User.js +15 -1
- package/lib/cjs/models/User.js.map +1 -1
- package/lib/cjs/ownership.d.ts +2 -0
- package/lib/cjs/ownership.d.ts.map +1 -0
- package/lib/cjs/ownership.js +46 -0
- package/lib/cjs/ownership.js.map +1 -0
- package/lib/cjs/session-codec.d.ts +15 -0
- package/lib/cjs/session-codec.d.ts.map +1 -0
- package/lib/cjs/session-codec.js +59 -0
- package/lib/cjs/session-codec.js.map +1 -0
- package/lib/cjs/session-expiration.d.ts +40 -0
- package/lib/cjs/session-expiration.d.ts.map +1 -0
- package/lib/cjs/session-expiration.js +93 -0
- package/lib/cjs/session-expiration.js.map +1 -0
- package/lib/cjs/session.d.ts +38 -18
- package/lib/cjs/session.d.ts.map +1 -1
- package/lib/cjs/session.js +91 -50
- package/lib/cjs/session.js.map +1 -1
- package/lib/mjs/actions.d.ts.map +1 -1
- package/lib/mjs/actions.js +32 -6
- package/lib/mjs/actions.js.map +1 -1
- package/lib/mjs/cli/ActivateUser.js +1 -1
- package/lib/mjs/cli/ActivateUser.js.map +1 -1
- package/lib/mjs/cli/BanUser.js +1 -1
- package/lib/mjs/cli/BanUser.js.map +1 -1
- package/lib/mjs/config/rbac.d.ts +11 -1
- package/lib/mjs/config/rbac.d.ts.map +1 -1
- package/lib/mjs/config/rbac.js +12 -3
- package/lib/mjs/config/rbac.js.map +1 -1
- package/lib/mjs/cron/DeactivatePasswords.d.ts.map +1 -1
- package/lib/mjs/cron/DeactivatePasswords.js +6 -2
- package/lib/mjs/cron/DeactivatePasswords.js.map +1 -1
- package/lib/mjs/index.d.ts +6 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +6 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +63 -37
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js +41 -0
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/middleware.d.ts +23 -1
- package/lib/mjs/middleware.d.ts.map +1 -1
- package/lib/mjs/middleware.js +158 -104
- package/lib/mjs/middleware.js.map +1 -1
- package/lib/mjs/models/User.d.ts.map +1 -1
- package/lib/mjs/models/User.js +15 -1
- package/lib/mjs/models/User.js.map +1 -1
- package/lib/mjs/ownership.d.ts +2 -0
- package/lib/mjs/ownership.d.ts.map +1 -0
- package/lib/mjs/ownership.js +44 -0
- package/lib/mjs/ownership.js.map +1 -0
- package/lib/mjs/session-codec.d.ts +15 -0
- package/lib/mjs/session-codec.d.ts.map +1 -0
- package/lib/mjs/session-codec.js +55 -0
- package/lib/mjs/session-codec.js.map +1 -0
- package/lib/mjs/session-expiration.d.ts +40 -0
- package/lib/mjs/session-expiration.d.ts.map +1 -0
- package/lib/mjs/session-expiration.js +90 -0
- package/lib/mjs/session-expiration.js.map +1 -0
- package/lib/mjs/session.d.ts +38 -18
- package/lib/mjs/session.d.ts.map +1 -1
- package/lib/mjs/session.js +89 -47
- package/lib/mjs/session.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +15 -12
package/lib/mjs/middleware.js
CHANGED
|
@@ -13,115 +13,169 @@ import { AsyncLocalStorage } from 'async_hooks';
|
|
|
13
13
|
import { AccessControl } from 'accesscontrol';
|
|
14
14
|
import { Forbidden } from '@spinajs/exceptions';
|
|
15
15
|
import { Log, Logger } from '@spinajs/log-common';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Which permission scopes a builder type is checked against.
|
|
18
|
+
*
|
|
19
|
+
* Keyed on the CONSTRUCTOR, not on `constructor.name`. A name-keyed lookup breaks under
|
|
20
|
+
* minification and silently yields "no mapping" — for a security check that means an
|
|
21
|
+
* unguarded query, which is why `IdentityMap` rejects name keys for the same reason (A9).
|
|
22
|
+
*
|
|
23
|
+
* `InsertQueryBuilder` was missing here while `PERMISSION_SCOPE_TO_QUERY` claimed to
|
|
24
|
+
* support `createOwn`/`createAny`, so the insert branch of the middleware could only ever
|
|
25
|
+
* have thrown a TypeError. The inverse map below is now DERIVED from this one, so the two
|
|
26
|
+
* cannot drift apart again.
|
|
27
|
+
*/
|
|
28
|
+
const QUERY_TO_PERMISSION = new Map([
|
|
29
|
+
[DeleteQueryBuilder, { own: 'deleteOwn', all: 'deleteAny' }],
|
|
30
|
+
[UpdateQueryBuilder, { own: 'updateOwn', all: 'updateAny' }],
|
|
31
|
+
[SelectQueryBuilder, { own: 'readOwn', all: 'readAny' }],
|
|
32
|
+
[InsertQueryBuilder, { own: 'createOwn', all: 'createAny' }],
|
|
33
|
+
]);
|
|
34
|
+
/** Derived inverse of {@link QUERY_TO_PERMISSION}. Never hand-maintained. */
|
|
35
|
+
const PERMISSION_SCOPE_TO_QUERY = new Map();
|
|
36
|
+
for (const [ctor, scopes] of QUERY_TO_PERMISSION) {
|
|
37
|
+
PERMISSION_SCOPE_TO_QUERY.set(scopes.own, ctor);
|
|
38
|
+
PERMISSION_SCOPE_TO_QUERY.set(scopes.all, ctor);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The permission scopes for `builder`, matched by `instanceof` so a driver-specific
|
|
42
|
+
* subclass resolves to its base builder's scopes instead of falling off the map.
|
|
43
|
+
*/
|
|
44
|
+
function permissionsFor(builder) {
|
|
45
|
+
for (const [ctor, scopes] of QUERY_TO_PERMISSION) {
|
|
46
|
+
if (builder instanceof ctor) {
|
|
47
|
+
return scopes;
|
|
48
|
+
}
|
|
28
49
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
deleteOwn: "DeleteQueryBuilder",
|
|
32
|
-
deleteAny: "DeleteQueryBuilder",
|
|
33
|
-
updateOwn: "UpdateQueryBuilder",
|
|
34
|
-
updateAny: "UpdateQueryBuilder",
|
|
35
|
-
readOwn: "SelectQueryBuilder",
|
|
36
|
-
readAny: "SelectQueryBuilder",
|
|
37
|
-
createOwn: "InsertQueryBuilder",
|
|
38
|
-
createAny: "InsertQueryBuilder"
|
|
39
|
-
};
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
40
52
|
let RbacModelPermissionMiddleware = class RbacModelPermissionMiddleware extends QueryMiddleware {
|
|
41
|
-
|
|
53
|
+
/**
|
|
54
|
+
* INSERT is enforced here rather than in `afterQueryCreation` because the row payload does
|
|
55
|
+
* not exist at construction time — `values()` is called afterwards and would overwrite an
|
|
56
|
+
* owner column stamped earlier. Reads and writes keep their where-clause injection at
|
|
57
|
+
* construction, where it has always been.
|
|
58
|
+
*/
|
|
59
|
+
beforeQueryExecution(builder) {
|
|
60
|
+
if (!(builder instanceof InsertQueryBuilder)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const context = this.context(builder);
|
|
64
|
+
if (!context) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const { descriptor, resource, canOwn, canAny } = context;
|
|
68
|
+
if (canAny) {
|
|
69
|
+
this.Log.trace(`Resource ${resource}:any insert permission granted`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!canOwn) {
|
|
73
|
+
throw new Forbidden(`User does not have permission to access ${resource}:${context.action} permission`);
|
|
74
|
+
}
|
|
75
|
+
if (!descriptor.OwnerField) {
|
|
76
|
+
this.Log.error(`Model ${descriptor.Name} does not have OwnerField set, cannot apply :own permission`);
|
|
77
|
+
throw new OrmException(`Model ${descriptor.Name} does not have OwnerField set, cannot apply :own permission`);
|
|
78
|
+
}
|
|
79
|
+
// Overwrite, never merge: a caller-supplied owner id is exactly the IDOR this closes.
|
|
80
|
+
builder.forceColumn(descriptor.OwnerField, context.user.PrimaryKeyValue);
|
|
81
|
+
}
|
|
42
82
|
afterQueryCreation(builder) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
[descriptor.OwnerField]: storage.User.PrimaryKeyValue
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
else if (!canAny) {
|
|
119
|
-
throw new Forbidden(`User does not have permission to access ${resource}:insert permission`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
83
|
+
// Insert is handled at execution time; anything else without a WHERE clause to constrain
|
|
84
|
+
// is not something this middleware knows how to guard.
|
|
85
|
+
if (!(builder instanceof SelectQueryBuilder || builder instanceof UpdateQueryBuilder || builder instanceof DeleteQueryBuilder)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const context = this.context(builder);
|
|
89
|
+
if (!context) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const { descriptor, resource, canOwn, canAny } = context;
|
|
93
|
+
if (canAny) {
|
|
94
|
+
this.Log.trace(`Resource ${resource}:any permission granted`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!canOwn) {
|
|
98
|
+
throw new Forbidden(`User does not have permission to access ${resource}:${context.action} permission`);
|
|
99
|
+
}
|
|
100
|
+
this.Log.trace(`Resource ${resource}:own permission granted`);
|
|
101
|
+
/**
|
|
102
|
+
* Model can have custom rbac permission check
|
|
103
|
+
*/
|
|
104
|
+
const rbacFunc = builder.Model?.rbac;
|
|
105
|
+
if (rbacFunc) {
|
|
106
|
+
this.Log.trace(`Applying custom rbac func for ${resource}`);
|
|
107
|
+
rbacFunc.call(builder, context.user);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!descriptor.OwnerField) {
|
|
111
|
+
this.Log.error(`Model ${descriptor.Name} does not have OwnerField set or static rbac function, cannot apply :own permission`);
|
|
112
|
+
throw new OrmException(`Model ${descriptor.Name} does not have OwnerField set, cannot apply :own permission`);
|
|
113
|
+
}
|
|
114
|
+
this.Log.trace(`Applying owner field restriction for ${resource}`);
|
|
115
|
+
builder.andWhere(descriptor.OwnerField, context.user.PrimaryKeyValue);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Everything both hooks need, or `undefined` when this query is not subject to a check.
|
|
119
|
+
*
|
|
120
|
+
* Shared so the two hooks cannot drift on who is exempt: no async context, no user, an
|
|
121
|
+
* explicit skip flag, a model with no `@Resource()`, or a declared `PermissionScope` that
|
|
122
|
+
* does not match this builder type.
|
|
123
|
+
*/
|
|
124
|
+
context(builder) {
|
|
125
|
+
if (typeof AsyncLocalStorage !== 'function') {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
const store = DI.get(AsyncLocalStorage);
|
|
129
|
+
const storage = store?.getStore();
|
|
130
|
+
if (!storage || !storage.User) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
if (storage.SkipModelPermissionCheck) {
|
|
134
|
+
this.Log.trace(`Model permission check disabled for current execution context, skipping rbac check`);
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
const descriptor = extractModelDescriptor(builder.Model);
|
|
138
|
+
// if model does not have @Resource() decorator set, no rbac is applied
|
|
139
|
+
const resource = descriptor?.RbacResource;
|
|
140
|
+
if (!resource) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
const scopes = permissionsFor(builder);
|
|
144
|
+
if (!scopes) {
|
|
145
|
+
// An unmapped builder type reaching a security middleware means an unguarded query.
|
|
146
|
+
// Fail loudly rather than let it through — the previous code read `.own` off
|
|
147
|
+
// `undefined` here and died with a bare TypeError.
|
|
148
|
+
throw new OrmException(`rbac cannot check permissions for query builder ${builder.constructor.name}: no permission mapping registered`);
|
|
149
|
+
}
|
|
150
|
+
if (storage.PermissionScope) {
|
|
151
|
+
const expected = PERMISSION_SCOPE_TO_QUERY.get(storage.PermissionScope);
|
|
152
|
+
if (!expected) {
|
|
153
|
+
this.Log.warn(`Permission scope ${storage.PermissionScope} does not match any query type, skipping rbac check`);
|
|
154
|
+
return undefined;
|
|
123
155
|
}
|
|
156
|
+
if (!(builder instanceof expected)) {
|
|
157
|
+
this.Log.warn(`Permission scope ${storage.PermissionScope} does not match query type ${builder.constructor.name}, skipping rbac check`);
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const ownScope = storage.PermissionScope ?? scopes.own;
|
|
162
|
+
const anyScope = storage.PermissionScope ?? scopes.all;
|
|
163
|
+
const roles = storage.ActiveRole ? [storage.ActiveRole] : storage.User.Role;
|
|
164
|
+
let canAny = false;
|
|
165
|
+
let canOwn = false;
|
|
166
|
+
try {
|
|
167
|
+
canAny = this.Ac.can(roles)[anyScope](resource).granted;
|
|
168
|
+
canOwn = this.Ac.can(roles)[ownScope](resource).granted;
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
// accesscontrol throws eg. "Role not found" when role has no grants registered
|
|
172
|
+
// treat as no permission so caller gets Forbidden instead of library error
|
|
173
|
+
this.Log.trace(`Permission check for roles ${roles} on resource ${resource} failed: ${err.message}, treating as no permission`);
|
|
124
174
|
}
|
|
175
|
+
// 'readOwn' -> 'read'. Keeps the Forbidden message accurate per builder type instead of
|
|
176
|
+
// the old hard-coded ':read', which was wrong for updates and deletes.
|
|
177
|
+
const action = anyScope.replace(/(Any|Own)$/, '');
|
|
178
|
+
return { descriptor, resource, canOwn, canAny, action, user: storage.User };
|
|
125
179
|
}
|
|
126
180
|
};
|
|
127
181
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,YAAY,EAAgB,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnL,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAW,SAAS,EAAmF,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAY,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC9O,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAgB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMnE,qBAAa,eAAgB,YAAW,UAAU;IAEhD;;;;;;OAMG;IACI,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;IAKpF;;;;;;;OAOG;IACI,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAU1F,SAAS,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,EAAE,WAAW,EAAE,IAAI,GAAG,MAAM;IAMnF,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe;IAejE,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe;IAKvE,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe;IAMrE;;;;OAIG;IACI,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe;IAOhE,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,EAAE,KAAK,EAAE,MAAM;IAQ7E,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,EAAE,KAAK,EAAE,MAAM;IAQ7E,SAAS,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,eAAe,EAAE,IAAI,EAAE,MAAM;IAQlF;;;;;;;;;OASG;IACI,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAa7G;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,6BAA6B;IAC7B,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IAEnC,wBAAwB;IAExB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,uBAAuB,4BAA4B;IAEnD,gBAAgB;IAEhB,cAAc,mBAAmB;IAEjC,qBAAqB;IAGrB,cAAc,mBAAmB;IAEjC,yBAAyB,8BAA8B;IAEvD,wBAAwB,6BAA6B;IAErD,oBAAoB,yBAAyB;IAE7C,2BAA2B,gCAAgC;CAC5D;AAED;;;;GAIG;AACH,qBAEa,QAAS,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC/C;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAsB;IAEjD,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC;IAE7B,gBAAuB,YAAY,EAAE,eAAe,CAAyB;gBAE1D,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;IAUhC,EAAE,EAAG,MAAM,CAAC;IAEZ,IAAI,EAAG,MAAM,CAAC;IAEd,KAAK,EAAG,MAAM,CAAC;IAEtB;;OAEG;IACI,QAAQ,EAAG,MAAM,CAAC;IAEzB;;OAEG;IACI,KAAK,EAAG,MAAM,CAAC;IAEtB;;OAEG;IAEI,IAAI,EAAG,MAAM,EAAE,CAAC;IAEvB;;OAEG;IAEI,SAAS,EAAG,QAAQ,CAAC;IAE5B;;OAEG;IAEI,YAAY,EAAG,QAAQ,CAAC;IAE/B;;OAEG;IAEI,SAAS,EAAG,QAAQ,CAAC;IAGrB,WAAW,EAAG,QAAQ,CAAC;IAE9B;;;OAGG;IACI,QAAQ,EAAG,OAAO,CAAC;IAE1B;;;;;OAKG;IAII,QAAQ,EAAG,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,QAAQ,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/models/User.js
CHANGED
|
@@ -164,7 +164,21 @@ let UserBase = UserBase_1 = class UserBase extends ModelBase {
|
|
|
164
164
|
return this.Role.indexOf('guest') !== -1 || this.Role.length === 0;
|
|
165
165
|
}
|
|
166
166
|
get IsBanned() {
|
|
167
|
-
|
|
167
|
+
if (this.Metadata[USER_COMMON_METADATA.USER_BAN_IS_BANNED] !== true) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
const start = this.Metadata[USER_COMMON_METADATA.USER_BAN_START_DATE];
|
|
171
|
+
const duration = this.Metadata[USER_COMMON_METADATA.USER_BAN_DURATION];
|
|
172
|
+
// no start/duration recorded -> treat as a permanent ban
|
|
173
|
+
if (!start || duration === null || duration === undefined) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
const startDt = start instanceof DateTime ? start : DateTime.fromISO(String(start));
|
|
177
|
+
if (!startDt.isValid) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
// ban is still active only until start + duration (seconds) elapses
|
|
181
|
+
return startDt.plus({ seconds: Number(duration) }) > DateTime.now();
|
|
168
182
|
}
|
|
169
183
|
dehydrateWithRelations(options) {
|
|
170
184
|
const base = super.dehydrateWithRelations(options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownership.d.ts","sourceRoot":"","sources":["../../src/ownership.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ModelBase, OrmException, extractModelDescriptor, wherePk } from '@spinajs/orm';
|
|
2
|
+
/**
|
|
3
|
+
* Implementation of the ownership helpers declared on `IModelStatic` in
|
|
4
|
+
* `interfaces.ts`. They were previously declared but never implemented, so any
|
|
5
|
+
* call to `Model.ensureOwnership` / `Model.checkOwnership` threw
|
|
6
|
+
* "not a function". They are attached to `ModelBase` so every model gets them.
|
|
7
|
+
*
|
|
8
|
+
* A model participates in ownership checks by decorating its owner column with
|
|
9
|
+
* `@ResourceOwner()`, which sets `OwnerField` on the model descriptor.
|
|
10
|
+
*/
|
|
11
|
+
function rbacDescriptor(model) {
|
|
12
|
+
const descriptor = extractModelDescriptor(model);
|
|
13
|
+
if (!descriptor || !descriptor.OwnerField) {
|
|
14
|
+
const name = descriptor?.Name ?? model?.name;
|
|
15
|
+
throw new OrmException(`Model ${name} does not have an @ResourceOwner() field, cannot check ownership`);
|
|
16
|
+
}
|
|
17
|
+
return descriptor;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Alters a query so it only returns/updates/deletes rows owned by `user`.
|
|
21
|
+
*/
|
|
22
|
+
ModelBase.ensureOwnership = function (query, user) {
|
|
23
|
+
const descriptor = rbacDescriptor(this);
|
|
24
|
+
return query.where(descriptor.OwnerField, user.PrimaryKeyValue);
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Checks whether a model (or its primary key) is owned by `user`.
|
|
28
|
+
* When passed a loaded model the owner column is compared in memory; when
|
|
29
|
+
* passed a primary key the ownership is verified with a scoped DB query.
|
|
30
|
+
*/
|
|
31
|
+
ModelBase.checkOwnership = async function (modelOrPrimaryKey, user) {
|
|
32
|
+
const descriptor = rbacDescriptor(this);
|
|
33
|
+
if (modelOrPrimaryKey instanceof ModelBase) {
|
|
34
|
+
return modelOrPrimaryKey[descriptor.OwnerField] === user.PrimaryKeyValue;
|
|
35
|
+
}
|
|
36
|
+
// `descriptor.PrimaryKey` is a string[] since the composite-key refactor, so it cannot be
|
|
37
|
+
// handed to `where()` as a column name — that took the whereObject path and filtered on
|
|
38
|
+
// nothing. `wherePk` is the ORM's single home for key predicates and handles both shapes.
|
|
39
|
+
const query = this.query();
|
|
40
|
+
wherePk(query, descriptor, modelOrPrimaryKey);
|
|
41
|
+
const found = await query.where(descriptor.OwnerField, user.PrimaryKeyValue).first();
|
|
42
|
+
return found !== undefined && found !== null;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownership.js","sourceRoot":"","sources":["../../src/ownership.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAgF,MAAM,cAAc,CAAC;AAItK;;;;;;;;GAQG;AAEH,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAY,CAAyB,CAAC;IAEhF,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,IAAK,KAAa,EAAE,IAAI,CAAC;QACtD,MAAM,IAAI,YAAY,CAAC,SAAS,IAAI,kEAAkE,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACF,SAAqD,CAAC,eAAe,GAAG,UAEvE,KAAqF,EACrF,IAAU;IAEV,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,OAAQ,KAAa,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF;;;;GAIG;AACF,SAAoD,CAAC,cAAc,GAAG,KAAK,WAE1E,iBAAmD,EACnD,IAAU;IAEV,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,iBAAiB,YAAY,SAAS,EAAE,CAAC;QAC3C,OAAQ,iBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC;IACpF,CAAC;IAED,0FAA0F;IAC1F,wFAAwF;IACxF,0FAA0F;IAC1F,MAAM,KAAK,GAAI,IAAY,CAAC,KAAK,EAAE,CAAC;IACpC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;IAErF,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializes a session `Data` map to a JSON string, preserving `Map` / `Set` /
|
|
3
|
+
* `DateTime` values.
|
|
4
|
+
*
|
|
5
|
+
* @param data - the session data map
|
|
6
|
+
*/
|
|
7
|
+
export declare function encodeSessionData(data: Map<string, unknown>): string;
|
|
8
|
+
/**
|
|
9
|
+
* Restores a session `Data` map from a JSON string produced by
|
|
10
|
+
* {@link encodeSessionData}.
|
|
11
|
+
*
|
|
12
|
+
* @param json - the serialized session data
|
|
13
|
+
*/
|
|
14
|
+
export declare function decodeSessionData(json: string): Map<string, unknown>;
|
|
15
|
+
//# sourceMappingURL=session-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-codec.d.ts","sourceRoot":"","sources":["../../src/session-codec.ts"],"names":[],"mappings":"AAwCA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAGpE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { replacer as baseReplacer, reviver as baseReviver } from '@spinajs/util';
|
|
3
|
+
/**
|
|
4
|
+
* Shared session-data serialization codec (fixes B5 — symmetric write/read).
|
|
5
|
+
*
|
|
6
|
+
* Persistent session stores (db / dynamodb / redis) use this pair so the
|
|
7
|
+
* `replacer` used on write and the `reviver` used on read are symmetric and
|
|
8
|
+
* structural types survive the round-trip:
|
|
9
|
+
* - `Map` / `Set` via the shared @spinajs/util replacer/reviver,
|
|
10
|
+
* - luxon `DateTime` via a tagged wrapper.
|
|
11
|
+
*
|
|
12
|
+
* The in-memory store keeps live objects and does not use this codec.
|
|
13
|
+
*/
|
|
14
|
+
const DATETIME_TAG = 'DateTime';
|
|
15
|
+
/**
|
|
16
|
+
* `JSON.stringify` replacer. Must read the RAW value from the holder (`this`)
|
|
17
|
+
* because luxon's `DateTime.prototype.toJSON` would otherwise stringify the
|
|
18
|
+
* DateTime to an ISO string before we can tag it.
|
|
19
|
+
*/
|
|
20
|
+
function sessionReplacer(key, value) {
|
|
21
|
+
const raw = this[key];
|
|
22
|
+
if (raw instanceof DateTime) {
|
|
23
|
+
return { dataType: DATETIME_TAG, value: raw.toISO() };
|
|
24
|
+
}
|
|
25
|
+
return baseReplacer(key, value);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `JSON.parse` reviver paired with {@link sessionReplacer}.
|
|
29
|
+
*/
|
|
30
|
+
function sessionReviver(key, value) {
|
|
31
|
+
if (value && typeof value === 'object' && value.dataType === DATETIME_TAG) {
|
|
32
|
+
return DateTime.fromISO(value.value);
|
|
33
|
+
}
|
|
34
|
+
return baseReviver(key, value);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Serializes a session `Data` map to a JSON string, preserving `Map` / `Set` /
|
|
38
|
+
* `DateTime` values.
|
|
39
|
+
*
|
|
40
|
+
* @param data - the session data map
|
|
41
|
+
*/
|
|
42
|
+
export function encodeSessionData(data) {
|
|
43
|
+
return JSON.stringify({ dataType: 'Map', value: Array.from(data.entries()) }, sessionReplacer);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Restores a session `Data` map from a JSON string produced by
|
|
47
|
+
* {@link encodeSessionData}.
|
|
48
|
+
*
|
|
49
|
+
* @param json - the serialized session data
|
|
50
|
+
*/
|
|
51
|
+
export function decodeSessionData(json) {
|
|
52
|
+
const parsed = JSON.parse(json, sessionReviver);
|
|
53
|
+
return parsed instanceof Map ? parsed : new Map();
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=session-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-codec.js","sourceRoot":"","sources":["../../src/session-codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,OAAO,IAAI,WAAW,EAAmB,MAAM,eAAe,CAAC;AAElG;;;;;;;;;;GAUG;AAEH,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC;;;;GAIG;AACH,SAAS,eAAe,CAAgC,GAAW,EAAE,KAAc;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,KAAgC;IACnE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAyB,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC/F,OAAO,QAAQ,CAAC,OAAO,CAAE,KAAyB,CAAC,KAAe,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,KAAwB,CAAC,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA0B;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;AACjG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAChD,OAAO,MAAM,YAAY,GAAG,CAAC,CAAC,CAAE,MAA+B,CAAC,CAAC,CAAC,IAAI,GAAG,EAAmB,CAAC;AAC/F,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { ISession, SessionExpirationProvider } from './interfaces.js';
|
|
3
|
+
/**
|
|
4
|
+
* Absolute expiration: the session dies at a fixed instant from creation and is
|
|
5
|
+
* never extended. `touch` is therefore a no-op (renew returns the current
|
|
6
|
+
* Expiration unchanged).
|
|
7
|
+
*
|
|
8
|
+
* Settings: `rbac.session.expiration.ttl` (minutes).
|
|
9
|
+
*/
|
|
10
|
+
export declare class AbsoluteExpiration extends SessionExpirationProvider {
|
|
11
|
+
protected Ttl: number;
|
|
12
|
+
initial(session: ISession): DateTime | undefined;
|
|
13
|
+
renew(session: ISession): DateTime | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Sliding expiration: every renewal pushes the expiration to `now + ttl`, with
|
|
17
|
+
* no upper bound. Activity keeps the session alive indefinitely.
|
|
18
|
+
*
|
|
19
|
+
* Settings: `rbac.session.expiration.ttl` (minutes).
|
|
20
|
+
*/
|
|
21
|
+
export declare class SlidingExpiration extends SessionExpirationProvider {
|
|
22
|
+
protected Ttl: number;
|
|
23
|
+
initial(_session: ISession): DateTime | undefined;
|
|
24
|
+
renew(_session: ISession): DateTime | undefined;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Sliding expiration with an absolute cap: renewal pushes the expiration to
|
|
28
|
+
* `now + ttl` but never past `Creation + maxLifetime`. Combines idle timeout
|
|
29
|
+
* with a hard session lifetime ceiling.
|
|
30
|
+
*
|
|
31
|
+
* Settings: `rbac.session.expiration.ttl` and
|
|
32
|
+
* `rbac.session.expiration.maxLifetime` (both minutes).
|
|
33
|
+
*/
|
|
34
|
+
export declare class SlidingCappedExpiration extends SessionExpirationProvider {
|
|
35
|
+
protected Ttl: number;
|
|
36
|
+
protected MaxLifetime: number;
|
|
37
|
+
initial(_session: ISession): DateTime | undefined;
|
|
38
|
+
renew(session: ISession): DateTime | undefined;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=session-expiration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-expiration.d.ts","sourceRoot":"","sources":["../../src/session-expiration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;;;;;GAMG;AACH,qBACa,kBAAmB,SAAQ,yBAAyB;IAE/D,SAAS,CAAC,GAAG,EAAG,MAAM,CAAC;IAEhB,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAIhD,KAAK,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;CAItD;AAED;;;;;GAKG;AACH,qBACa,iBAAkB,SAAQ,yBAAyB;IAE9D,SAAS,CAAC,GAAG,EAAG,MAAM,CAAC;IAEhB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAIjD,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;CAGvD;AAED;;;;;;;GAOG;AACH,qBACa,uBAAwB,SAAQ,yBAAyB;IAEpE,SAAS,CAAC,GAAG,EAAG,MAAM,CAAC;IAGvB,SAAS,CAAC,WAAW,EAAG,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAIjD,KAAK,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;CAKtD"}
|