@cqrs-ddd/pipeline-casl 0.5.0 → 0.5.2
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/COMMERCIAL_LICENSE.txt +14 -10
- package/dist/casl.behavior.d.ts.map +1 -1
- package/dist/casl.behavior.js.map +1 -1
- package/dist/helpers/authorizer.d.ts.map +1 -1
- package/dist/helpers/authorizer.js +34 -16
- package/dist/helpers/authorizer.js.map +1 -1
- package/dist/helpers/capability.d.ts.map +1 -1
- package/dist/helpers/capability.js +56 -55
- package/dist/helpers/capability.js.map +1 -1
- package/dist/helpers/projection.d.ts +9 -1
- package/dist/helpers/projection.d.ts.map +1 -1
- package/dist/helpers/projection.js +115 -78
- package/dist/helpers/projection.js.map +1 -1
- package/package.json +16 -8
package/COMMERCIAL_LICENSE.txt
CHANGED
|
@@ -9,21 +9,25 @@ This Commercial License Agreement ("Agreement") is a legal agreement between You
|
|
|
9
9
|
Upon acceptance of this Agreement and compliance with the Payment Terms in Section 2, the Licensor grants You a non-exclusive, worldwide, non-transferable license to use, modify, integrate, and distribute the Software in commercial applications WITHOUT the copyleft obligations of the GNU Affero General Public License v3 (AGPLv3). Under this Agreement, You are NOT required to open-source Your proprietary code that integrates with the Software.
|
|
10
10
|
|
|
11
11
|
2. PAYMENT TERMS AND REVENUE TIERS
|
|
12
|
-
This license requires an annual fee based on Your (or Your organization's) total gross global revenue for the most recently completed fiscal year.
|
|
12
|
+
This license requires an annual fee based on Your (or Your organization's) total gross global revenue for the most recently completed fiscal year.
|
|
13
13
|
|
|
14
|
-
The annual fee is calculated using the following
|
|
14
|
+
The annual fee is calculated using the following marginal brackets. Each rate applies only to the portion of gross revenue that falls within its bracket, and the annual fee is the sum of the amounts for all brackets:
|
|
15
15
|
|
|
16
|
-
a) Tier 1:
|
|
17
|
-
|
|
16
|
+
a) Tier 1: The portion of gross revenue up to $500,000 USD
|
|
17
|
+
Rate: 0% (Free Commercial Use). If gross revenue does not exceed $500,000 USD, the fee is $0.
|
|
18
18
|
|
|
19
|
-
b) Tier 2:
|
|
20
|
-
|
|
19
|
+
b) Tier 2: The portion of gross revenue above $500,000 USD and up to $10,000,000 USD
|
|
20
|
+
Rate: 0.1% of that portion.
|
|
21
21
|
|
|
22
|
-
c) Tier 3:
|
|
23
|
-
|
|
22
|
+
c) Tier 3: The portion of gross revenue above $10,000,000 USD and up to $50,000,000 USD
|
|
23
|
+
Rate: 0.05% of that portion.
|
|
24
24
|
|
|
25
|
-
d) Tier 4:
|
|
26
|
-
|
|
25
|
+
d) Tier 4: The portion of gross revenue above $50,000,000 USD
|
|
26
|
+
Rate: 0.01% of that portion.
|
|
27
|
+
|
|
28
|
+
The total annual fee never exceeds a maximum hard cap of $50,000 USD per year.
|
|
29
|
+
|
|
30
|
+
Example: for gross revenue of $20,000,000 USD, the annual fee is 0.1% of $9,500,000 USD ($9,500) plus 0.05% of $10,000,000 USD ($5,000), a total of $14,500 USD.
|
|
27
31
|
|
|
28
32
|
3. REPORTING AND REMITTANCE
|
|
29
33
|
- Fees are calculated annually and must be remitted to the Licensor within ninety (90) days following the close of Your fiscal year.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casl.behavior.d.ts","sourceRoot":"","sources":["../src/casl.behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,yCAAyC,CAAC;AAEvE,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,KAAK,EAAE,SAAS,CAAC,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;;;GASG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IAGxC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,0CAAoB;IAE1D,YAA6B,MAAM,EAAE,qBAAqB,EAMzD;IAEK,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"casl.behavior.d.ts","sourceRoot":"","sources":["../src/casl.behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,yCAAyC,CAAC;AAEvE,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,KAAK,EAAE,SAAS,CAAC,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;;;GASG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IAGxC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,0CAAoB;IAE1D,YAA6B,MAAM,EAAE,qBAAqB,EAMzD;IAEK,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,CAgClB;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casl.behavior.js","sourceRoot":"","sources":["../src/casl.behavior.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAIL,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAQvE;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAY;IAGM,MAAM;IAFnC,MAAM,CAAU,CAAC,oBAAoB,CAAC,GAAG,gBAAgB,CAAC;IAE1D,YAA6B,MAA6B;sBAA7B,MAAM;QACjC,IAAI,OAAO,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CACjB,yFAAyF,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAyB,EACzB,IAAkB;QAElB,MAAM,KAAK,GACT,OAAO,CAAC,kBAAkB,CAAsB,YAAY,CAAC,EAAE,KAAK,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,MAAM;YAAE,OAAO,IAAI,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,2BAA2B,CAAC;gBACpC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBACvB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;gBACzB,MAAM,EAAE,0CAA0C;aACnD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE7C,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,KAAK;gBACnB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;gBACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,2BAA2B,CAAC;oBACpC,MAAM;oBACN,OAAO;oBACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;
|
|
1
|
+
{"version":3,"file":"casl.behavior.js","sourceRoot":"","sources":["../src/casl.behavior.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAIL,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAQvE;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAY;IAGM,MAAM;IAFnC,MAAM,CAAU,CAAC,oBAAoB,CAAC,GAAG,gBAAgB,CAAC;IAE1D,YAA6B,MAA6B;sBAA7B,MAAM;QACjC,IAAI,OAAO,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CACjB,yFAAyF,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAyB,EACzB,IAAkB;QAElB,MAAM,KAAK,GACT,OAAO,CAAC,kBAAkB,CAAsB,YAAY,CAAC,EAAE,KAAK,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,MAAM;YAAE,OAAO,IAAI,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,2BAA2B,CAAC;gBACpC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBACvB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;gBACzB,MAAM,EAAE,0CAA0C;aACnD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE7C,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,KAAK;gBACnB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;gBACrC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,2BAA2B,CAAC;oBACpC,MAAM;oBACN,OAAO;oBACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorizer.d.ts","sourceRoot":"","sources":["../../src/helpers/authorizer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGpE,2EAA2E;AAC3E,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,GAAG,SAAS,CAGxB;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,GAAG,SAAS,CAG3B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAArC,YAA6B,OAAO,CAAC,EAAE,UAAU,YAAA,EAAI;IAErD;;;;;OAKG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAOrE;IAED;;;;OAIG;IACH,SAAS,CACP,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GACzB,IAAI,
|
|
1
|
+
{"version":3,"file":"authorizer.d.ts","sourceRoot":"","sources":["../../src/helpers/authorizer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGpE,2EAA2E;AAC3E,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,GAAG,SAAS,CAGxB;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,GAAG,SAAS,CAG3B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAArC,YAA6B,OAAO,CAAC,EAAE,UAAU,YAAA,EAAI;IAErD;;;;;OAKG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAOrE;IAED;;;;OAIG;IACH,SAAS,CACP,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GACzB,IAAI,CAgBN;IAED;;;OAGG;IACH,OAAO,CAAC,UAAU,SAAS,MAAM,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,UAAU,GACpB,SAAS,CAAC,UAAU,CAAC,CAavB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGxD;IAED,OAAO,CAAC,SAAS;CAmBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CA2BT"}
|
|
@@ -58,9 +58,13 @@ export class CaslAuthorizer {
|
|
|
58
58
|
const { ability, subjectType, entityId, typedSubject } = this.permitted(action, subject);
|
|
59
59
|
for (const field of fields ?? []) {
|
|
60
60
|
if (!ability.can(action, typedSubject, field)) {
|
|
61
|
-
throw denied(
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
throw denied({
|
|
62
|
+
action,
|
|
63
|
+
subjectType,
|
|
64
|
+
entityId,
|
|
65
|
+
detail: ` field "${field}"`,
|
|
66
|
+
fields: [field],
|
|
67
|
+
});
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
}
|
|
@@ -73,7 +77,12 @@ export class CaslAuthorizer {
|
|
|
73
77
|
throw new TypeError('CaslAuthorizer.project() requires a candidate object.');
|
|
74
78
|
}
|
|
75
79
|
const { ability, typedSubject } = this.permitted(action, subject);
|
|
76
|
-
return projectPermittedFields(
|
|
80
|
+
return projectPermittedFields({
|
|
81
|
+
ability,
|
|
82
|
+
action,
|
|
83
|
+
typedSubject,
|
|
84
|
+
record: toSnapshot(candidate),
|
|
85
|
+
});
|
|
77
86
|
}
|
|
78
87
|
/**
|
|
79
88
|
* Whether the decision for `action` on `subject` depends on the entity's
|
|
@@ -99,11 +108,17 @@ export class CaslAuthorizer {
|
|
|
99
108
|
permitted(action, subject) {
|
|
100
109
|
const ability = this.ability ?? getCaslAbility();
|
|
101
110
|
const resolved = resolveSubject(subject);
|
|
111
|
+
const { subjectType, entityId } = resolved;
|
|
102
112
|
if (!ability) {
|
|
103
|
-
throw denied(
|
|
113
|
+
throw denied({
|
|
114
|
+
action,
|
|
115
|
+
subjectType,
|
|
116
|
+
entityId,
|
|
117
|
+
detail: ' (no authorization ability present in context)',
|
|
118
|
+
});
|
|
104
119
|
}
|
|
105
120
|
if (!ability.can(action, resolved.typedSubject)) {
|
|
106
|
-
throw denied(action,
|
|
121
|
+
throw denied({ action, subjectType, entityId, detail: '' });
|
|
107
122
|
}
|
|
108
123
|
return { ability, ...resolved };
|
|
109
124
|
}
|
|
@@ -140,7 +155,7 @@ function toSnapshot(value) {
|
|
|
140
155
|
? value.toJSON()
|
|
141
156
|
: value;
|
|
142
157
|
}
|
|
143
|
-
function denied(action, subjectType, entityId, detail, fields) {
|
|
158
|
+
function denied({ action, subjectType, entityId, detail, fields, }) {
|
|
144
159
|
return new UnauthorizedActionException({
|
|
145
160
|
action,
|
|
146
161
|
subject: subjectType,
|
|
@@ -153,15 +168,7 @@ function resolveSubject(subject) {
|
|
|
153
168
|
if (typeof subject === 'string') {
|
|
154
169
|
return { subjectType: subject, typedSubject: subject };
|
|
155
170
|
}
|
|
156
|
-
|
|
157
|
-
// is `Object`; its tag is the only reliable subject type.
|
|
158
|
-
const tagged = subject
|
|
159
|
-
.__caslSubjectType__;
|
|
160
|
-
const subjectType = typeof tagged === 'string' && tagged.length > 0
|
|
161
|
-
? tagged
|
|
162
|
-
: subject.constructor?.name && subject.constructor.name !== 'Object'
|
|
163
|
-
? subject.constructor.name
|
|
164
|
-
: 'Object';
|
|
171
|
+
const subjectType = subjectTypeOf(subject);
|
|
165
172
|
const record = toSnapshot(subject);
|
|
166
173
|
const entityId = subject.id ??
|
|
167
174
|
record?.id;
|
|
@@ -170,4 +177,15 @@ function resolveSubject(subject) {
|
|
|
170
177
|
});
|
|
171
178
|
return { subjectType, entityId, typedSubject };
|
|
172
179
|
}
|
|
180
|
+
function subjectTypeOf(subject) {
|
|
181
|
+
// A value tagged by CASL's `subject()` is a plain object whose constructor
|
|
182
|
+
// is `Object`; its tag is the only reliable subject type.
|
|
183
|
+
const tagged = subject
|
|
184
|
+
.__caslSubjectType__;
|
|
185
|
+
if (typeof tagged === 'string' && tagged.length > 0)
|
|
186
|
+
return tagged;
|
|
187
|
+
return subject.constructor?.name && subject.constructor.name !== 'Object'
|
|
188
|
+
? subject.constructor.name
|
|
189
|
+
: 'Object';
|
|
190
|
+
}
|
|
173
191
|
//# sourceMappingURL=authorizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorizer.js","sourceRoot":"","sources":["../../src/helpers/authorizer.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAyB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAGzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAC5B,OAA0B;IAE1B,MAAM,GAAG,GAAG,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;IAChD,OAAO,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAA2B,CAAC;AACpE,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAC9B,OAA0B;IAE1B,MAAM,GAAG,GAAG,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;IAChD,OAAO,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAA8B,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,cAAc;IACI,OAAO;IAApC,YAA6B,OAAoB;uBAApB,OAAO;IAAgB,CAAC;IAErD;;;;;OAKG;IACH,GAAG,CAAC,MAAc,EAAE,OAAwB,EAAE,KAAc;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,KAAK;YACV,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;YAC1C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,SAAS,CACP,MAAc,EACd,OAAwB,EACxB,MAA0B;QAE1B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CACrE,MAAM,EACN,OAAO,CACR,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"authorizer.js","sourceRoot":"","sources":["../../src/helpers/authorizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/helpers/capability.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/helpers/capability.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,UAAU,CAqCvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,UAAU,GAAG,gBAAgB,GACjC,UAAU,CA4BZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CA8BrE;AAkKD,kFAAkF;AAClF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMlC"}
|
|
@@ -41,13 +41,9 @@
|
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
export function parseCapabilityString(cap) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
inverted = true;
|
|
48
|
-
str = str.slice(1);
|
|
49
|
-
}
|
|
50
|
-
const parts = str.split('|');
|
|
44
|
+
const trimmed = cap.trim();
|
|
45
|
+
const inverted = trimmed.startsWith('!');
|
|
46
|
+
const parts = (inverted ? trimmed.slice(1) : trimmed).split('|');
|
|
51
47
|
if (parts.length > 5) {
|
|
52
48
|
throw new Error(`Invalid capability string: too many segments in "${cap}"`);
|
|
53
49
|
}
|
|
@@ -62,23 +58,9 @@ export function parseCapabilityString(cap) {
|
|
|
62
58
|
const rawConditions = parts[2];
|
|
63
59
|
const rawFields = parts[3];
|
|
64
60
|
const rawReason = parts[4];
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
const json = rawConditions.startsWith('~')
|
|
70
|
-
? Buffer.from(rawConditions.slice(1), 'base64url').toString('utf8')
|
|
71
|
-
: rawConditions;
|
|
72
|
-
parsed = JSON.parse(json);
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
throw new Error(`Invalid conditions JSON in capability string "${cap}": ${rawConditions}`);
|
|
76
|
-
}
|
|
77
|
-
if (!isPlainObject(parsed)) {
|
|
78
|
-
throw new TypeError(`Capability conditions must be a JSON object in "${cap}".`);
|
|
79
|
-
}
|
|
80
|
-
conditions = parsed;
|
|
81
|
-
}
|
|
61
|
+
const conditions = rawConditions && rawConditions !== '*'
|
|
62
|
+
? decodeConditionsSegment(rawConditions, cap)
|
|
63
|
+
: undefined;
|
|
82
64
|
const result = { subject, action };
|
|
83
65
|
if (inverted)
|
|
84
66
|
result.inverted = true;
|
|
@@ -184,46 +166,49 @@ function copyJsonConditions(value, ancestors = new WeakSet()) {
|
|
|
184
166
|
return value;
|
|
185
167
|
if (typeof value === 'number' && Number.isFinite(value))
|
|
186
168
|
return value;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
(!Array.isArray(value) && !isPlainObject(value)) ||
|
|
190
|
-
ancestors.has(value)) {
|
|
169
|
+
const isJsonContainer = Array.isArray(value) || isPlainObject(value);
|
|
170
|
+
if (!isJsonContainer || ancestors.has(value)) {
|
|
191
171
|
throw new TypeError('Unsupported condition value.');
|
|
192
172
|
}
|
|
193
173
|
ancestors.add(value);
|
|
194
174
|
try {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// Arrays must have exactly their length property and contiguous indices.
|
|
199
|
-
if (keys.length !== value.length + 1)
|
|
200
|
-
throw new TypeError('Lossy condition array.');
|
|
201
|
-
const result = [];
|
|
202
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
203
|
-
const descriptor = descriptors[String(index)];
|
|
204
|
-
if (!descriptor?.enumerable || !('value' in descriptor)) {
|
|
205
|
-
throw new TypeError('Condition arrays must contain only JSON data.');
|
|
206
|
-
}
|
|
207
|
-
result.push(copyJsonConditions(descriptor.value, ancestors));
|
|
208
|
-
}
|
|
209
|
-
return result;
|
|
210
|
-
}
|
|
211
|
-
const result = Object.create(null);
|
|
212
|
-
for (const key of keys) {
|
|
213
|
-
if (typeof key !== 'string')
|
|
214
|
-
throw new TypeError('Symbol condition keys are unsupported.');
|
|
215
|
-
const descriptor = descriptors[key];
|
|
216
|
-
if (!descriptor.enumerable || !('value' in descriptor)) {
|
|
217
|
-
throw new TypeError('Conditions must contain only enumerable JSON data.');
|
|
218
|
-
}
|
|
219
|
-
result[key] = copyJsonConditions(descriptor.value, ancestors);
|
|
220
|
-
}
|
|
221
|
-
return result;
|
|
175
|
+
if (Array.isArray(value))
|
|
176
|
+
return copyJsonArray(value, ancestors);
|
|
177
|
+
return copyJsonObject(value, ancestors);
|
|
222
178
|
}
|
|
223
179
|
finally {
|
|
224
180
|
ancestors.delete(value);
|
|
225
181
|
}
|
|
226
182
|
}
|
|
183
|
+
function copyJsonObject(value, ancestors) {
|
|
184
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
185
|
+
const result = Object.create(null);
|
|
186
|
+
for (const key of Reflect.ownKeys(descriptors)) {
|
|
187
|
+
if (typeof key !== 'string')
|
|
188
|
+
throw new TypeError('Symbol condition keys are unsupported.');
|
|
189
|
+
const descriptor = descriptors[key];
|
|
190
|
+
if (!descriptor.enumerable || !('value' in descriptor)) {
|
|
191
|
+
throw new TypeError('Conditions must contain only enumerable JSON data.');
|
|
192
|
+
}
|
|
193
|
+
result[key] = copyJsonConditions(descriptor.value, ancestors);
|
|
194
|
+
}
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
function copyJsonArray(value, ancestors) {
|
|
198
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
199
|
+
// Arrays must have exactly their length property and contiguous indices.
|
|
200
|
+
if (Reflect.ownKeys(descriptors).length !== value.length + 1)
|
|
201
|
+
throw new TypeError('Lossy condition array.');
|
|
202
|
+
const result = [];
|
|
203
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
204
|
+
const descriptor = descriptors[String(index)];
|
|
205
|
+
if (!descriptor?.enumerable || !('value' in descriptor)) {
|
|
206
|
+
throw new TypeError('Condition arrays must contain only JSON data.');
|
|
207
|
+
}
|
|
208
|
+
result.push(copyJsonConditions(descriptor.value, ancestors));
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
227
212
|
function encodeTextSegment(value, escapeBang = false, escapeStar = false) {
|
|
228
213
|
const needsEncoding = value.startsWith('~') ||
|
|
229
214
|
value.includes('|') ||
|
|
@@ -261,6 +246,22 @@ function encodeFieldsSegment(fields) {
|
|
|
261
246
|
? fields.join(',')
|
|
262
247
|
: `~${Buffer.from(JSON.stringify(fields), 'utf8').toString('base64url')}`;
|
|
263
248
|
}
|
|
249
|
+
function decodeConditionsSegment(value, capability) {
|
|
250
|
+
let parsed;
|
|
251
|
+
try {
|
|
252
|
+
const json = value.startsWith('~')
|
|
253
|
+
? Buffer.from(value.slice(1), 'base64url').toString('utf8')
|
|
254
|
+
: value;
|
|
255
|
+
parsed = JSON.parse(json);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
throw new Error(`Invalid conditions JSON in capability string "${capability}": ${value}`);
|
|
259
|
+
}
|
|
260
|
+
if (!isPlainObject(parsed)) {
|
|
261
|
+
throw new TypeError(`Capability conditions must be a JSON object in "${capability}".`);
|
|
262
|
+
}
|
|
263
|
+
return parsed;
|
|
264
|
+
}
|
|
264
265
|
function decodeFieldsSegment(value, capability) {
|
|
265
266
|
if (!value.startsWith('~'))
|
|
266
267
|
return value.split(',');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/helpers/capability.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAqB;IACzD,
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/helpers/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { AppAbility } from '../types/casl.types.js';
|
|
2
|
+
/** A snapshot to project, with the ability, action and CASL subject that decide its fields. */
|
|
3
|
+
interface ProjectionRequest {
|
|
4
|
+
ability: AppAbility;
|
|
5
|
+
action: string;
|
|
6
|
+
typedSubject: string;
|
|
7
|
+
record: Record<string, unknown> | unknown[];
|
|
8
|
+
}
|
|
2
9
|
/**
|
|
3
10
|
* Projects a snapshot to the fields `ability` permits for `action`. Conditions
|
|
4
11
|
* are evaluated against the full subject. A granted parent path authorizes its
|
|
@@ -7,5 +14,6 @@ import type { AppAbility } from '../types/casl.types.js';
|
|
|
7
14
|
* `parent.*`/`parent.**`. Denied array elements become `null`. Cyclic input
|
|
8
15
|
* and more than 1024 path aliases throw.
|
|
9
16
|
*/
|
|
10
|
-
export declare function projectPermittedFields(ability
|
|
17
|
+
export declare function projectPermittedFields({ ability, action, typedSubject, record, }: ProjectionRequest): Record<string, unknown> | unknown[];
|
|
18
|
+
export {};
|
|
11
19
|
//# sourceMappingURL=projection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/helpers/projection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/helpers/projection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAoBzD,+FAA+F;AAC/F,UAAU,iBAAiB;IACzB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,MAAM,EACN,YAAY,EACZ,MAAM,GACP,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAIzD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* Copyright (C) 2026-present Aristotelis — see repository license. */
|
|
2
2
|
const OMIT = Symbol('unreadable-field');
|
|
3
|
+
const MAX_PATH_ALIASES = 1024;
|
|
3
4
|
/** Defines an own data property, so a `__proto__` key stays a plain field. */
|
|
4
5
|
function defineField(target, key, value) {
|
|
5
6
|
Object.defineProperty(target, key, {
|
|
@@ -17,26 +18,60 @@ function defineField(target, key, value) {
|
|
|
17
18
|
* `parent.*`/`parent.**`. Denied array elements become `null`. Cyclic input
|
|
18
19
|
* and more than 1024 path aliases throw.
|
|
19
20
|
*/
|
|
20
|
-
export function projectPermittedFields(ability, action, typedSubject, record) {
|
|
21
|
-
|
|
21
|
+
export function projectPermittedFields({ ability, action, typedSubject, record, }) {
|
|
22
|
+
return new FieldProjection(ability, action, typedSubject).projectSnapshot(record);
|
|
23
|
+
}
|
|
24
|
+
/** One projection: the decision it applies and the objects above the current value. */
|
|
25
|
+
class FieldProjection {
|
|
26
|
+
ability;
|
|
27
|
+
action;
|
|
28
|
+
typedSubject;
|
|
29
|
+
ancestors = new WeakSet();
|
|
30
|
+
constructor(ability, action, typedSubject) {
|
|
31
|
+
this.ability = ability;
|
|
32
|
+
this.action = action;
|
|
33
|
+
this.typedSubject = typedSubject;
|
|
34
|
+
}
|
|
35
|
+
projectSnapshot(record) {
|
|
36
|
+
if (Array.isArray(record))
|
|
37
|
+
return this.projectItems(record);
|
|
38
|
+
return this.projectFields(record);
|
|
39
|
+
}
|
|
40
|
+
projectItems(record) {
|
|
41
|
+
this.ancestors.add(record);
|
|
42
|
+
try {
|
|
43
|
+
return record.map((item, index) => {
|
|
44
|
+
// The empty path gives named fields the same meaning for every item.
|
|
45
|
+
const projected = this.project(item, ['', String(index)], null);
|
|
46
|
+
return projected === OMIT ? null : projected;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
this.ancestors.delete(record);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
projectFields(record) {
|
|
54
|
+
const result = {};
|
|
55
|
+
this.ancestors.add(record);
|
|
56
|
+
try {
|
|
57
|
+
for (const [key, value] of Object.entries(record)) {
|
|
58
|
+
const projected = this.project(value, [key], null);
|
|
59
|
+
if (projected !== OMIT)
|
|
60
|
+
defineField(result, key, projected);
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
this.ancestors.delete(record);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
22
68
|
// Evaluate full field paths using CASL. Conditions use the complete subject.
|
|
23
|
-
|
|
69
|
+
ruleFor(paths, inherited) {
|
|
24
70
|
let rule = null;
|
|
25
71
|
for (const field of paths) {
|
|
26
72
|
if (!field)
|
|
27
73
|
continue;
|
|
28
|
-
|
|
29
|
-
if (candidate) {
|
|
30
|
-
if (candidate.inverted) {
|
|
31
|
-
if (!rule?.inverted || candidate.priority < rule.priority) {
|
|
32
|
-
rule = candidate;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else if (!rule ||
|
|
36
|
-
(!rule.inverted && candidate.priority < rule.priority)) {
|
|
37
|
-
rule = candidate;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
74
|
+
rule = preferredRule(rule, this.ability.relevantRuleFor(this.action, this.typedSubject, field));
|
|
40
75
|
}
|
|
41
76
|
// A direct leaf denial always takes precedence over an inherited grant.
|
|
42
77
|
if (rule?.inverted) {
|
|
@@ -55,86 +90,88 @@ export function projectPermittedFields(ability, action, typedSubject, record) {
|
|
|
55
90
|
}
|
|
56
91
|
return null;
|
|
57
92
|
}
|
|
58
|
-
|
|
59
|
-
const rule = ruleFor(paths, inherited);
|
|
60
|
-
const allowed = !!rule && !rule.inverted;
|
|
93
|
+
project(value, paths, inherited) {
|
|
94
|
+
const rule = this.ruleFor(paths, inherited);
|
|
61
95
|
if (value === null || typeof value !== 'object' || value instanceof Date) {
|
|
62
|
-
return
|
|
96
|
+
return permits(rule) ? value : OMIT;
|
|
63
97
|
}
|
|
64
|
-
if (ancestors.has(value)) {
|
|
98
|
+
if (this.ancestors.has(value)) {
|
|
65
99
|
throw new TypeError('Cannot project a cyclic authorization snapshot.');
|
|
66
100
|
}
|
|
67
|
-
ancestors.add(value);
|
|
101
|
+
this.ancestors.add(value);
|
|
68
102
|
try {
|
|
69
103
|
const toJSON = value.toJSON;
|
|
70
104
|
if (typeof toJSON === 'function') {
|
|
71
|
-
return project(toJSON.call(value), paths, rule);
|
|
72
|
-
}
|
|
73
|
-
if (Array.isArray(value)) {
|
|
74
|
-
if (value.length === 0)
|
|
75
|
-
return allowed ? [] : OMIT;
|
|
76
|
-
let visible = false;
|
|
77
|
-
const result = value.map((item, index) => {
|
|
78
|
-
// Named paths apply to every element; indexed paths can additionally
|
|
79
|
-
// restrict individual elements. Keep positions stable after masking.
|
|
80
|
-
const elementPaths = [
|
|
81
|
-
...new Set([
|
|
82
|
-
...paths,
|
|
83
|
-
...paths.map((path) => path ? `${path}.${index}` : String(index)),
|
|
84
|
-
]),
|
|
85
|
-
];
|
|
86
|
-
// Nested arrays have both named and indexed aliases. Bound their
|
|
87
|
-
// combinations so pathological input fails closed instead of exploding.
|
|
88
|
-
if (elementPaths.length > 1024) {
|
|
89
|
-
throw new TypeError('Authorization snapshot has too many array path aliases.');
|
|
90
|
-
}
|
|
91
|
-
const projected = project(item, elementPaths, rule);
|
|
92
|
-
if (projected !== OMIT)
|
|
93
|
-
visible = true;
|
|
94
|
-
return projected === OMIT ? null : projected;
|
|
95
|
-
});
|
|
96
|
-
return visible ? result : OMIT;
|
|
97
|
-
}
|
|
98
|
-
const entries = Object.entries(value);
|
|
99
|
-
if (entries.length === 0)
|
|
100
|
-
return allowed ? {} : OMIT;
|
|
101
|
-
const result = {};
|
|
102
|
-
for (const [key, child] of entries) {
|
|
103
|
-
const projected = project(child, paths.map((path) => (path ? `${path}.${key}` : key)), rule);
|
|
104
|
-
if (projected !== OMIT)
|
|
105
|
-
defineField(result, key, projected);
|
|
105
|
+
return this.project(toJSON.call(value), paths, rule);
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
if (Array.isArray(value))
|
|
108
|
+
return this.projectArray(value, paths, rule);
|
|
109
|
+
return this.projectRecord(value, paths, rule);
|
|
108
110
|
}
|
|
109
111
|
finally {
|
|
110
|
-
ancestors.delete(value);
|
|
112
|
+
this.ancestors.delete(value);
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
115
|
+
projectArray(value, paths, rule) {
|
|
116
|
+
if (value.length === 0)
|
|
117
|
+
return permits(rule) ? [] : OMIT;
|
|
118
|
+
let visible = false;
|
|
119
|
+
const result = value.map((item, index) => {
|
|
120
|
+
const projected = this.project(item, elementPaths(paths, index), rule);
|
|
121
|
+
if (projected !== OMIT)
|
|
122
|
+
visible = true;
|
|
123
|
+
return projected === OMIT ? null : projected;
|
|
124
|
+
});
|
|
125
|
+
return visible ? result : OMIT;
|
|
125
126
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
projectRecord(value, paths, rule) {
|
|
128
|
+
const entries = Object.entries(value);
|
|
129
|
+
if (entries.length === 0)
|
|
130
|
+
return permits(rule) ? {} : OMIT;
|
|
131
|
+
const result = {};
|
|
132
|
+
for (const [key, child] of entries) {
|
|
133
|
+
const projected = this.project(child, paths.map((path) => (path ? `${path}.${key}` : key)), rule);
|
|
131
134
|
if (projected !== OMIT)
|
|
132
135
|
defineField(result, key, projected);
|
|
133
136
|
}
|
|
134
|
-
return result;
|
|
137
|
+
return Object.keys(result).length > 0 ? result : OMIT;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function permits(rule) {
|
|
141
|
+
return !!rule && !rule.inverted;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The stronger of the rule chosen so far and a candidate: a denial outranks a
|
|
145
|
+
* grant, and between two of a kind the lower `priority` wins; a tie keeps the
|
|
146
|
+
* current rule.
|
|
147
|
+
*/
|
|
148
|
+
function preferredRule(current, candidate) {
|
|
149
|
+
if (!candidate)
|
|
150
|
+
return current;
|
|
151
|
+
if (candidate.inverted) {
|
|
152
|
+
return !current?.inverted || candidate.priority < current.priority
|
|
153
|
+
? candidate
|
|
154
|
+
: current;
|
|
135
155
|
}
|
|
136
|
-
|
|
137
|
-
|
|
156
|
+
return !current ||
|
|
157
|
+
(!current.inverted && candidate.priority < current.priority)
|
|
158
|
+
? candidate
|
|
159
|
+
: current;
|
|
160
|
+
}
|
|
161
|
+
function elementPaths(paths, index) {
|
|
162
|
+
// Named paths apply to every element; indexed paths can additionally
|
|
163
|
+
// restrict individual elements. Keep positions stable after masking.
|
|
164
|
+
const aliases = [
|
|
165
|
+
...new Set([
|
|
166
|
+
...paths,
|
|
167
|
+
...paths.map((path) => (path ? `${path}.${index}` : String(index))),
|
|
168
|
+
]),
|
|
169
|
+
];
|
|
170
|
+
// Nested arrays have both named and indexed aliases. Bound their
|
|
171
|
+
// combinations so pathological input fails closed instead of exploding.
|
|
172
|
+
if (aliases.length > MAX_PATH_ALIASES) {
|
|
173
|
+
throw new TypeError('Authorization snapshot has too many array path aliases.');
|
|
138
174
|
}
|
|
175
|
+
return aliases;
|
|
139
176
|
}
|
|
140
177
|
//# sourceMappingURL=projection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/helpers/projection.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAKtE,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/helpers/projection.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cqrs-ddd/pipeline-casl",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "CASL authorization for @cqrs-ddd/pipeline: type-level checks before the handler, entity and field checks after it",
|
|
5
5
|
"author": "Aristotelis",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -39,19 +39,27 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@cqrs-ddd/safe-stringify": "^0.5.
|
|
42
|
+
"@cqrs-ddd/safe-stringify": "^0.5.2"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@casl/ability": "^7.0.0",
|
|
46
|
-
"@cqrs-ddd/pipeline": "^0.5.
|
|
46
|
+
"@cqrs-ddd/pipeline": "^0.5.2"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@casl/ability": "^7.0.
|
|
50
|
-
"@
|
|
51
|
-
"vitest": "^5.0.
|
|
52
|
-
"
|
|
49
|
+
"@casl/ability": "^7.0.2",
|
|
50
|
+
"@cqrs-ddd/pipeline": "0.5.2",
|
|
51
|
+
"@vitest/coverage-v8": "^5.0.5",
|
|
52
|
+
"vitest": "^5.0.5"
|
|
53
53
|
},
|
|
54
|
-
"keywords": [
|
|
54
|
+
"keywords": [
|
|
55
|
+
"pipeline",
|
|
56
|
+
"cqrs",
|
|
57
|
+
"authorization",
|
|
58
|
+
"casl",
|
|
59
|
+
"permissions",
|
|
60
|
+
"abac",
|
|
61
|
+
"behavior"
|
|
62
|
+
],
|
|
55
63
|
"scripts": {
|
|
56
64
|
"build": "tsc -p tsconfig.build.json",
|
|
57
65
|
"build:watch": "tsc -p tsconfig.build.json --watch",
|