@haverstack/core 0.42.0 → 0.44.0
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/README.md +6 -9
- package/dist/access.d.ts +36 -34
- package/dist/access.d.ts.map +1 -1
- package/dist/access.js +51 -100
- package/dist/access.js.map +1 -1
- package/dist/adapter/combine.d.ts.map +1 -1
- package/dist/adapter/combine.js +14 -7
- package/dist/adapter/combine.js.map +1 -1
- package/dist/adapter/copy.d.ts +27 -0
- package/dist/adapter/copy.d.ts.map +1 -0
- package/dist/adapter/copy.js +105 -0
- package/dist/adapter/copy.js.map +1 -0
- package/dist/adapter/index.d.ts +9 -4
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +6 -3
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/reach.d.ts +14 -0
- package/dist/adapter/reach.d.ts.map +1 -0
- package/dist/adapter/reach.js +31 -0
- package/dist/adapter/reach.js.map +1 -0
- package/dist/adapter/seed.d.ts +13 -0
- package/dist/adapter/seed.d.ts.map +1 -0
- package/dist/adapter/seed.js +26 -0
- package/dist/adapter/seed.js.map +1 -0
- package/dist/associations/identity.d.ts +18 -42
- package/dist/associations/identity.d.ts.map +1 -1
- package/dist/associations/identity.js +60 -84
- package/dist/associations/identity.js.map +1 -1
- package/dist/associations/validation.d.ts +1 -8
- package/dist/associations/validation.d.ts.map +1 -1
- package/dist/associations/validation.js +3 -30
- package/dist/associations/validation.js.map +1 -1
- package/dist/collection.d.ts +7 -11
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +24 -34
- package/dist/collection.js.map +1 -1
- package/dist/content-match.d.ts +2 -2
- package/dist/content-match.js +2 -2
- package/dist/errors.d.ts +41 -12
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +56 -15
- package/dist/errors.js.map +1 -1
- package/dist/grants.d.ts +18 -6
- package/dist/grants.d.ts.map +1 -1
- package/dist/grants.js +48 -37
- package/dist/grants.js.map +1 -1
- package/dist/hash.d.ts +8 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +14 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +29 -5
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +69 -44
- package/dist/install.js.map +1 -1
- package/dist/lazy.d.ts +13 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +27 -0
- package/dist/lazy.js.map +1 -0
- package/dist/merge.d.ts +1 -1
- package/dist/merge.js +1 -1
- package/dist/query-validation.d.ts +41 -28
- package/dist/query-validation.d.ts.map +1 -1
- package/dist/query-validation.js +85 -71
- package/dist/query-validation.js.map +1 -1
- package/dist/record-changes.d.ts +12 -36
- package/dist/record-changes.d.ts.map +1 -1
- package/dist/record-changes.js +9 -98
- package/dist/record-changes.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -5
- package/dist/schema.js.map +1 -1
- package/dist/scoped-stack/authority-snapshot.d.ts +37 -0
- package/dist/scoped-stack/authority-snapshot.d.ts.map +1 -0
- package/dist/scoped-stack/authority-snapshot.js +49 -0
- package/dist/scoped-stack/authority-snapshot.js.map +1 -0
- package/dist/scoped-stack/authority.d.ts +69 -51
- package/dist/scoped-stack/authority.d.ts.map +1 -1
- package/dist/scoped-stack/authority.js +189 -153
- package/dist/scoped-stack/authority.js.map +1 -1
- package/dist/scoped-stack/family-policy.d.ts +59 -0
- package/dist/scoped-stack/family-policy.d.ts.map +1 -0
- package/dist/scoped-stack/family-policy.js +68 -0
- package/dist/scoped-stack/family-policy.js.map +1 -0
- package/dist/scoped-stack/scoped-stack.d.ts +73 -86
- package/dist/scoped-stack/scoped-stack.d.ts.map +1 -1
- package/dist/scoped-stack/scoped-stack.js +279 -337
- package/dist/scoped-stack/scoped-stack.js.map +1 -1
- package/dist/scoped-stack/subscription.d.ts +14 -33
- package/dist/scoped-stack/subscription.d.ts.map +1 -1
- package/dist/scoped-stack/subscription.js +16 -57
- package/dist/scoped-stack/subscription.js.map +1 -1
- package/dist/stack/arguments.d.ts +27 -0
- package/dist/stack/arguments.d.ts.map +1 -0
- package/dist/stack/arguments.js +53 -0
- package/dist/stack/arguments.js.map +1 -0
- package/dist/stack/attachments.d.ts +1 -1
- package/dist/stack/attachments.js +1 -1
- package/dist/stack/changes.d.ts +4 -10
- package/dist/stack/changes.d.ts.map +1 -1
- package/dist/stack/changes.js +8 -8
- package/dist/stack/changes.js.map +1 -1
- package/dist/stack/client.d.ts +34 -58
- package/dist/stack/client.d.ts.map +1 -1
- package/dist/stack/field-rules.d.ts +27 -0
- package/dist/stack/field-rules.d.ts.map +1 -0
- package/dist/stack/field-rules.js +50 -0
- package/dist/stack/field-rules.js.map +1 -0
- package/dist/stack/install-app.d.ts +2 -2
- package/dist/stack/install-app.d.ts.map +1 -1
- package/dist/stack/install-app.js +16 -14
- package/dist/stack/install-app.js.map +1 -1
- package/dist/stack/integrity.d.ts +9 -53
- package/dist/stack/integrity.d.ts.map +1 -1
- package/dist/stack/integrity.js +47 -107
- package/dist/stack/integrity.js.map +1 -1
- package/dist/stack/limits.d.ts +1 -1
- package/dist/stack/limits.js +1 -1
- package/dist/stack/reads.d.ts +9 -5
- package/dist/stack/reads.d.ts.map +1 -1
- package/dist/stack/reads.js +24 -4
- package/dist/stack/reads.js.map +1 -1
- package/dist/stack/stack.d.ts +84 -79
- package/dist/stack/stack.d.ts.map +1 -1
- package/dist/stack/stack.js +236 -306
- package/dist/stack/stack.js.map +1 -1
- package/dist/stack/system-types.d.ts.map +1 -1
- package/dist/stack/system-types.js +1 -3
- package/dist/stack/system-types.js.map +1 -1
- package/dist/stack/type-grants.d.ts.map +1 -1
- package/dist/stack/type-grants.js +9 -6
- package/dist/stack/type-grants.js.map +1 -1
- package/dist/stack/write-expectation.d.ts +13 -12
- package/dist/stack/write-expectation.d.ts.map +1 -1
- package/dist/stack/write-expectation.js.map +1 -1
- package/dist/stack/write-gate.d.ts +23 -0
- package/dist/stack/write-gate.d.ts.map +1 -0
- package/dist/stack/write-gate.js +17 -0
- package/dist/stack/write-gate.js.map +1 -0
- package/dist/testing.d.ts +37 -24
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +176 -153
- package/dist/testing.js.map +1 -1
- package/dist/types/adapter.d.ts +115 -43
- package/dist/types/adapter.d.ts.map +1 -1
- package/dist/types/associations.d.ts +1 -17
- package/dist/types/associations.d.ts.map +1 -1
- package/dist/types/associations.js +1 -8
- package/dist/types/associations.js.map +1 -1
- package/dist/types/capabilities.d.ts +8 -8
- package/dist/types/capabilities.d.ts.map +1 -1
- package/dist/types/events.d.ts +3 -8
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/query.d.ts +4 -4
- package/dist/types/system.d.ts +2 -8
- package/dist/types/system.d.ts.map +1 -1
- package/dist/types/system.js.map +1 -1
- package/dist/validate.d.ts +2 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +2 -1
- package/dist/validate.js.map +1 -1
- package/dist/wire/body.d.ts +32 -9
- package/dist/wire/body.d.ts.map +1 -1
- package/dist/wire/body.js +69 -8
- package/dist/wire/body.js.map +1 -1
- package/dist/wire/index.d.ts +4 -4
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +3 -3
- package/dist/wire/index.js.map +1 -1
- package/dist/wire/record.d.ts +1 -8
- package/dist/wire/record.d.ts.map +1 -1
- package/dist/wire/record.js +0 -48
- package/dist/wire/record.js.map +1 -1
- package/dist/wire/request.d.ts +18 -18
- package/dist/wire/request.d.ts.map +1 -1
- package/dist/wire/request.js +41 -36
- package/dist/wire/request.js.map +1 -1
- package/package.json +1 -1
- package/dist/stack/identity-bindings.d.ts +0 -13
- package/dist/stack/identity-bindings.d.ts.map +0 -1
- package/dist/stack/identity-bindings.js +0 -36
- package/dist/stack/identity-bindings.js.map +0 -1
|
@@ -8,30 +8,70 @@
|
|
|
8
8
|
* writes. See docs/spec/access-control.md § Delegation: principal and
|
|
9
9
|
* subject.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import { groupRoleFromAssociations, isOwnerActingAlone, readCompanions, roleSatisfies, } from '../access.js';
|
|
12
|
+
import { inReach } from '../adapter/reach.js';
|
|
12
13
|
import { StackError, StackNotFoundError, StackPermissionError } from '../errors.js';
|
|
13
14
|
import { UNGRANTABLE_SYSTEM_TYPES, grantConveys, grantCoversGrantee, grantReach, } from '../grants.js';
|
|
14
|
-
import { filtersContent } from '../query-validation.js';
|
|
15
|
+
import { filtersContent, splitQuery } from '../query-validation.js';
|
|
15
16
|
import { baseIdOf, fileRefFields } from '../schema.js';
|
|
17
|
+
import { familyPolicy } from './family-policy.js';
|
|
16
18
|
import { claimedFamilies, familyStanding, INSTALL_APP_LABEL, linkedIds } from '../install.js';
|
|
17
|
-
import { findFirstMatch, loadGrantRecords, loadInstallRecords, queryAllPages, } from '../stack/reads.js';
|
|
19
|
+
import { findFirstMatch, loadGrantRecords, loadInstallRecords, loadRosterRoles, queryAllPages, } from '../stack/reads.js';
|
|
20
|
+
import { AuthoritySnapshot } from './authority-snapshot.js';
|
|
18
21
|
import { SYSTEM_TYPES } from '../types/index.js';
|
|
22
|
+
/**
|
|
23
|
+
* How each side of a request reads a grant. The subject is the entity a
|
|
24
|
+
* grant is written about, so every tier counts; on the principal's side
|
|
25
|
+
* only a grant naming it directly counts. See
|
|
26
|
+
* docs/spec/access-control.md § Delegation: principal and subject.
|
|
27
|
+
*/
|
|
28
|
+
const SUBJECT_SIDE = { allowDefault: true, allowGroup: true };
|
|
29
|
+
const PRINCIPAL_SIDE = { allowDefault: false, allowGroup: false };
|
|
30
|
+
/**
|
|
31
|
+
* What each verb is granted by: the grant action reaching a family whole,
|
|
32
|
+
* the one reaching the subject's own Records in it, and the permission bit
|
|
33
|
+
* reaching one Record. See docs/spec/access-control.md § Reach.
|
|
34
|
+
*/
|
|
35
|
+
const VERBS = {
|
|
36
|
+
create: { any: 'create' },
|
|
37
|
+
read: { any: 'read-any', own: 'read-own', bit: 'read' },
|
|
38
|
+
update: { any: 'update-any', own: 'update-own', bit: 'write' },
|
|
39
|
+
delete: { any: 'delete-any', own: 'delete-own', bit: 'write' },
|
|
40
|
+
};
|
|
41
|
+
const ANYONE = { kind: 'anyone', label: 'read' };
|
|
19
42
|
export class ScopeAuthority {
|
|
20
43
|
stack;
|
|
21
44
|
principalId;
|
|
22
45
|
subjectId;
|
|
46
|
+
queryReadable;
|
|
23
47
|
constructor(stack,
|
|
24
48
|
/** Whose grants bound what this request may do — see ScopedStack.principalId. */
|
|
25
49
|
principalId,
|
|
26
50
|
/** Whom this request acts for and attributes writes to — see ScopedStack.subjectId. */
|
|
27
|
-
subjectId
|
|
51
|
+
subjectId,
|
|
52
|
+
/** Stack.query() within a reach — see ScopedStack.query(). */
|
|
53
|
+
queryReadable) {
|
|
28
54
|
this.stack = stack;
|
|
29
55
|
this.principalId = principalId;
|
|
30
56
|
this.subjectId = subjectId;
|
|
57
|
+
this.queryReadable = queryReadable;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The authority this request acts with, for one operation: pass it to
|
|
61
|
+
* each check the operation makes, so the grants, the rosters and each
|
|
62
|
+
* verb's reach are read at most once. An anonymous request is named by no
|
|
63
|
+
* grant and held by no roster, so it reads neither.
|
|
64
|
+
*/
|
|
65
|
+
snapshot() {
|
|
66
|
+
const subject = this.subjectId;
|
|
67
|
+
return new AuthoritySnapshot({
|
|
68
|
+
grants: () => this.identified ? loadGrantRecords((q) => this.stack.query(q)) : Promise.resolve([]),
|
|
69
|
+
roles: () => subject === null
|
|
70
|
+
? Promise.resolve(new Map())
|
|
71
|
+
: loadRosterRoles((q) => this.stack.query(q), subject),
|
|
72
|
+
reach: (verb, snapshot) => this.buildReach(verb, snapshot),
|
|
73
|
+
});
|
|
31
74
|
}
|
|
32
|
-
resolveRecord = (id) => this.stack.get(id, { includeDeleted: true });
|
|
33
|
-
/** Every `_grant` Record — see loadGrantRecords(). */
|
|
34
|
-
loadGrants = () => loadGrantRecords((q) => this.stack.query(q));
|
|
35
75
|
/** Whether a delegated app is acting for someone other than itself. */
|
|
36
76
|
get delegated() {
|
|
37
77
|
return this.subjectId !== this.principalId;
|
|
@@ -68,105 +108,116 @@ export class ScopeAuthority {
|
|
|
68
108
|
get ownerActingAlone() {
|
|
69
109
|
return isOwnerActingAlone({ principalId: this.principalId, subjectId: this.subjectId }, this.stack.ownerEntityId);
|
|
70
110
|
}
|
|
71
|
-
/**
|
|
72
|
-
|
|
73
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Whether no grant bounds the principal: undelegated, it is the subject
|
|
113
|
+
* itself, and the owner as principal is the owner's own software.
|
|
114
|
+
* See docs/spec/access-control.md § Delegation: principal and subject.
|
|
115
|
+
*/
|
|
116
|
+
get principalUnbounded() {
|
|
117
|
+
return !this.delegated || this.principalId === this.stack.ownerEntityId;
|
|
74
118
|
}
|
|
75
119
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
120
|
+
* The families `grantee`'s grants convey one of `actions` on, read the way
|
|
121
|
+
* `side` reads a grant. Only the subject's side counts a group, so the
|
|
122
|
+
* rosters read are always the subject's.
|
|
123
|
+
* See docs/spec/access-control.md § Who a grant reaches.
|
|
80
124
|
*/
|
|
81
|
-
async
|
|
82
|
-
const { grantee, record, prefetchedGrants, matchOwn = true, allowDefault = true, allowGroup = true, } = opts;
|
|
125
|
+
async familiesConveying(grantee, side, actions, snapshot) {
|
|
83
126
|
if (!grantee)
|
|
84
|
-
return
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
// this loop naming the same group.
|
|
88
|
-
const groupRoles = opts.groupRoles ?? new Map();
|
|
89
|
-
const familyId = baseIdOf(typeId);
|
|
90
|
-
// grantType() refuses to write these, but a _grant record is an ordinary
|
|
91
|
-
// Record: an unscoped Stack, an import, or a server mapping a request
|
|
92
|
-
// body onto Stack can mint one anyway. Refusing at the point of use is
|
|
93
|
-
// what makes the rule hold regardless of how the record got there.
|
|
94
|
-
if (UNGRANTABLE_SYSTEM_TYPES.has(familyId))
|
|
95
|
-
return false;
|
|
96
|
-
let grantRecords;
|
|
97
|
-
if (prefetchedGrants !== undefined) {
|
|
98
|
-
grantRecords = prefetchedGrants;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// Cursor-walked to see grants past page one. A stored baseId is
|
|
102
|
-
// judged by grantReach(), which refuses a versioned one.
|
|
103
|
-
grantRecords = await this.loadGrants();
|
|
104
|
-
}
|
|
105
|
-
for (const r of grantRecords) {
|
|
127
|
+
return [];
|
|
128
|
+
const families = new Set();
|
|
129
|
+
for (const r of await snapshot.grants()) {
|
|
106
130
|
const c = r.content;
|
|
131
|
+
// A stored baseId is judged by grantReach(), which refuses a
|
|
132
|
+
// versioned one.
|
|
107
133
|
const reach = grantReach(c);
|
|
108
|
-
if (!reach || reach.familyId
|
|
134
|
+
if (!reach || families.has(reach.familyId))
|
|
109
135
|
continue;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (!covers)
|
|
136
|
+
// grantType() refuses to write these, but a _grant record is an
|
|
137
|
+
// ordinary Record: an unscoped Stack, an import, or a server mapping
|
|
138
|
+
// a request body onto Stack can mint one anyway. Refusing at the
|
|
139
|
+
// point of use is what makes the rule hold regardless of how the
|
|
140
|
+
// record got there.
|
|
141
|
+
if (UNGRANTABLE_SYSTEM_TYPES.has(reach.familyId))
|
|
117
142
|
continue;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
return true;
|
|
124
|
-
});
|
|
125
|
-
if (matches)
|
|
126
|
-
return true;
|
|
143
|
+
if (!actions.some((a) => grantConveys(reach.actions, a)))
|
|
144
|
+
continue;
|
|
145
|
+
if (await grantCoversGrantee(c, grantee, { ...side, roles: snapshot.roles })) {
|
|
146
|
+
families.add(reach.familyId);
|
|
147
|
+
}
|
|
127
148
|
}
|
|
128
|
-
return
|
|
149
|
+
return [...families];
|
|
129
150
|
}
|
|
130
151
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
152
|
+
* What this request may do with `verb` — that verb's rules, built whole
|
|
153
|
+
* even where a Record's own permissions would settle it, since every gate
|
|
154
|
+
* asks one value at a flat cost. The principal's grants fence it; within,
|
|
155
|
+
* the subject reaches what grants and permissions give it, an owner
|
|
156
|
+
* subject everything. See docs/spec/access-control.md § Reach.
|
|
135
157
|
*/
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
158
|
+
async buildReach(verb, snapshot) {
|
|
159
|
+
const { any, own, bit } = VERBS[verb];
|
|
160
|
+
const reach = this.principalUnbounded
|
|
161
|
+
? {}
|
|
162
|
+
: {
|
|
163
|
+
fence: await this.familiesConveying(this.principalId, PRINCIPAL_SIDE, own ? [any, own] : [any], snapshot),
|
|
164
|
+
};
|
|
165
|
+
const subject = this.subjectId;
|
|
166
|
+
if (subject === this.stack.ownerEntityId)
|
|
167
|
+
return reach;
|
|
168
|
+
const families = (action) => this.familiesConveying(subject, SUBJECT_SIDE, [action], snapshot);
|
|
169
|
+
reach.within = {
|
|
170
|
+
baseIds: await families(any),
|
|
171
|
+
...(subject !== null &&
|
|
172
|
+
own && { authored: { subjectId: subject, baseIds: await families(own) } }),
|
|
173
|
+
permissions: bit ? await this.elementSets(bit, snapshot) : [],
|
|
174
|
+
};
|
|
175
|
+
return reach;
|
|
142
176
|
}
|
|
143
177
|
/**
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* installMayMigrate().
|
|
178
|
+
* The permission elements carrying `bit` to the subject, as the sets a
|
|
179
|
+
* Record must hold whole. A `read` stands alone, as does `anyone`; a
|
|
180
|
+
* `write` stands beside one of its readCompanions().
|
|
148
181
|
*/
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
182
|
+
async elementSets(bit, snapshot) {
|
|
183
|
+
const grantees = [];
|
|
184
|
+
const subject = this.subjectId;
|
|
185
|
+
if (subject !== null) {
|
|
186
|
+
grantees.push({ kind: 'entity', entityId: subject });
|
|
187
|
+
for (const [groupId, held] of await snapshot.roles()) {
|
|
188
|
+
for (const role of ['member', 'admin']) {
|
|
189
|
+
if (roleSatisfies(held, role))
|
|
190
|
+
grantees.push({ kind: 'group', groupId, role });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const element = (label, grantee) => ({
|
|
195
|
+
kind: 'permission',
|
|
196
|
+
label,
|
|
197
|
+
grantee,
|
|
156
198
|
});
|
|
199
|
+
if (bit === 'read')
|
|
200
|
+
return [[ANYONE], ...grantees.map((g) => [element('read', g)])];
|
|
201
|
+
return grantees.flatMap((g) => readCompanions(g).map((c) => [element('write', g), c]));
|
|
202
|
+
}
|
|
203
|
+
/** Whether this request may `verb` the Record: its reach, asked of one Record. */
|
|
204
|
+
async may(verb, record, snapshot) {
|
|
205
|
+
return inReach(record, await snapshot.reach(verb));
|
|
157
206
|
}
|
|
158
207
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* subject is the entity a grant is written about.
|
|
208
|
+
* may() with the principal's fence set aside — whether the subject alone
|
|
209
|
+
* reaches the Record, for a refusal that says which side lacked the verb.
|
|
162
210
|
*/
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
211
|
+
async subjectMay(verb, record, snapshot) {
|
|
212
|
+
const { within } = await snapshot.reach(verb);
|
|
213
|
+
return inReach(record, within ? { within } : {});
|
|
214
|
+
}
|
|
215
|
+
canRead(record, snapshot) {
|
|
216
|
+
return this.may('read', record, snapshot);
|
|
217
|
+
}
|
|
218
|
+
/** Whether this request may create a Record of the type, asked of the Record it would make. */
|
|
219
|
+
canCreate(typeId, snapshot) {
|
|
220
|
+
return this.may('create', { typeId, createdBy: this.requester }, snapshot);
|
|
170
221
|
}
|
|
171
222
|
/**
|
|
172
223
|
* How to refuse a record this request addressed by ID: a permission error
|
|
@@ -174,45 +225,39 @@ export class ScopeAuthority {
|
|
|
174
225
|
* `message` only reaches someone holding the record already.
|
|
175
226
|
* See docs/spec/disclosure.md § Which refusal a Record answers with.
|
|
176
227
|
*/
|
|
177
|
-
async denialFor(record, message) {
|
|
178
|
-
|
|
179
|
-
// carried by a record-level permission settles without reading a grant
|
|
180
|
-
// at all, and that path must not pay for this one. Both halves of
|
|
181
|
-
// canRead share the one scan.
|
|
182
|
-
const grants = this.identified ? await this.loadGrants() : undefined;
|
|
183
|
-
if (await this.canRead(record, grants))
|
|
228
|
+
async denialFor(record, message, snapshot) {
|
|
229
|
+
if (await this.canRead(record, snapshot))
|
|
184
230
|
return new StackPermissionError(message);
|
|
185
231
|
return new StackNotFoundError(`Record not found: "${record.id}"`);
|
|
186
232
|
}
|
|
187
|
-
async canRead(record, prefetchedGrants, groupRoles) {
|
|
188
|
-
const reachable = (await this.recordPermits(record, 'read')) ||
|
|
189
|
-
(await this.subjectAllows(record.typeId, ['read-own', 'read-any'], {
|
|
190
|
-
record,
|
|
191
|
-
prefetchedGrants,
|
|
192
|
-
groupRoles,
|
|
193
|
-
}));
|
|
194
|
-
if (!reachable)
|
|
195
|
-
return false;
|
|
196
|
-
return this.principalAllows(record.typeId, ['read-own', 'read-any'], prefetchedGrants);
|
|
197
|
-
}
|
|
198
|
-
async checkCreateGrant(typeId) {
|
|
199
|
-
if (this.ownerActingAlone)
|
|
200
|
-
return true;
|
|
201
|
-
const reachable = this.subjectId === this.stack.ownerEntityId || (await this.subjectAllows(typeId, ['create']));
|
|
202
|
-
if (!reachable)
|
|
203
|
-
return false;
|
|
204
|
-
return this.principalAllows(typeId, ['create']);
|
|
205
|
-
}
|
|
206
233
|
/**
|
|
207
234
|
* `_group` records are managed, not merely written: only the owner or an
|
|
208
235
|
* `admin` roster holder may mutate them — ordinary write permissions and
|
|
209
|
-
* grants don't apply.
|
|
210
|
-
* a
|
|
236
|
+
* grants don't apply. Under delegation the subject must manage the Group
|
|
237
|
+
* and the principal must be the owner: a roster entry, like a group
|
|
238
|
+
* grant, never counts on the principal's side.
|
|
239
|
+
* See docs/spec/access-control.md § Delegation: principal and subject.
|
|
211
240
|
*/
|
|
212
241
|
isGroupManager(record) {
|
|
213
|
-
if (!this.
|
|
214
|
-
return
|
|
215
|
-
return
|
|
242
|
+
if (!this.delegated)
|
|
243
|
+
return this.managesGroup(this.principalId, record);
|
|
244
|
+
return this.principalUnbounded && this.managesGroup(this.subjectId, record);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Whether this request passes `record`'s family fence: none for an
|
|
248
|
+
* ordinary family, the owner acting alone for `_grant` and `_install`, the
|
|
249
|
+
* Group's managers for `_group`. Asked of the Record a create would make
|
|
250
|
+
* as of a stored one. See docs/spec/access-control.md § Per-verb gates.
|
|
251
|
+
*/
|
|
252
|
+
passesWriterFence(record) {
|
|
253
|
+
switch (familyPolicy(record.typeId).writers) {
|
|
254
|
+
case 'owner-alone':
|
|
255
|
+
return this.ownerActingAlone;
|
|
256
|
+
case 'group-managers':
|
|
257
|
+
return this.isGroupManager(record);
|
|
258
|
+
case 'ordinary':
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
216
261
|
}
|
|
217
262
|
/** Whether one identity, on its own, manages `record` — see isGroupManager(). */
|
|
218
263
|
managesGroup(entityId, record) {
|
|
@@ -228,13 +273,13 @@ export class ScopeAuthority {
|
|
|
228
273
|
* owner acting alone skips the lookup and leaves absence to `Stack`.
|
|
229
274
|
* See docs/spec/access-control.md § Reference-creation gating.
|
|
230
275
|
*/
|
|
231
|
-
async canReadReferent(recordId) {
|
|
276
|
+
async canReadReferent(recordId, snapshot) {
|
|
232
277
|
if (this.ownerActingAlone)
|
|
233
278
|
return true;
|
|
234
279
|
const record = await this.stack.get(recordId, { includeDeleted: true });
|
|
235
280
|
if (!record)
|
|
236
281
|
return false;
|
|
237
|
-
return this.canRead(record);
|
|
282
|
+
return this.canRead(record, snapshot);
|
|
238
283
|
}
|
|
239
284
|
/**
|
|
240
285
|
* Whether this request can read some record referencing `fileId`, other
|
|
@@ -242,14 +287,12 @@ export class ScopeAuthority {
|
|
|
242
287
|
* unlock unlimited further metadata records for the file.
|
|
243
288
|
* See docs/spec/attachments.md § Creating `_attachment@1` records directly.
|
|
244
289
|
*/
|
|
245
|
-
async hasReadableReference(fileId) {
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
const match = await findFirstMatch((q) => this.stack.query(q),
|
|
290
|
+
async hasReadableReference(fileId, snapshot) {
|
|
291
|
+
const reach = await snapshot.reach('read');
|
|
292
|
+
const match = await findFirstMatch((q) => this.queryReadable(splitQuery(q), reach),
|
|
249
293
|
// Reach, not enumeration: a record readable by ID conveys the file it
|
|
250
294
|
// references. See docs/spec/unlisted.md.
|
|
251
|
-
{ filter: { referencesFileId: fileId, includeUnlisted: true } }, (record) => baseIdOf(record.typeId) !== SYSTEM_TYPES.ATTACHMENT
|
|
252
|
-
this.canRead(record, prefetchedGrants, groupRoles));
|
|
295
|
+
{ filter: { referencesFileId: fileId, includeUnlisted: true } }, (record) => baseIdOf(record.typeId) !== SYSTEM_TYPES.ATTACHMENT);
|
|
253
296
|
return match !== undefined;
|
|
254
297
|
}
|
|
255
298
|
/**
|
|
@@ -258,22 +301,22 @@ export class ScopeAuthority {
|
|
|
258
301
|
* indistinguishable (both false), so no confirmation oracle for guessed
|
|
259
302
|
* hashes. See docs/spec/access-control.md § Reference-creation gating.
|
|
260
303
|
*/
|
|
261
|
-
async canAccessFile(fileId) {
|
|
304
|
+
async canAccessFile(fileId, snapshot) {
|
|
262
305
|
if (this.ownerActingAlone)
|
|
263
306
|
return true;
|
|
264
307
|
// Reaching a file through a record this request can read is already
|
|
265
|
-
// fully intersected —
|
|
266
|
-
//
|
|
267
|
-
if (await this.hasReadableReference(fileId))
|
|
308
|
+
// fully intersected — the reach fences that record's own type, which
|
|
309
|
+
// is the type the reference lives on.
|
|
310
|
+
if (await this.hasReadableReference(fileId, snapshot))
|
|
268
311
|
return true;
|
|
269
312
|
if (!this.subjectId)
|
|
270
313
|
return false;
|
|
271
314
|
// The remaining paths are authorship facts about the subject, so they
|
|
272
315
|
// decide *which* files match — they are not themselves a grant, and the
|
|
273
316
|
// principal still needs one of its own on the attachment type.
|
|
274
|
-
|
|
317
|
+
const { fence } = await snapshot.reach('read');
|
|
318
|
+
if (fence && !fence.includes(SYSTEM_TYPES.ATTACHMENT))
|
|
275
319
|
return false;
|
|
276
|
-
}
|
|
277
320
|
if (this.subjectId === this.stack.ownerEntityId)
|
|
278
321
|
return true;
|
|
279
322
|
// `includeUnlisted`, as hasReadableReference() above: withholding a
|
|
@@ -303,7 +346,7 @@ export class ScopeAuthority {
|
|
|
303
346
|
* owner approved, holding `update-any` on each directly.
|
|
304
347
|
* See docs/spec/apps.md § Migrating an installed app's types.
|
|
305
348
|
*/
|
|
306
|
-
async installMayMigrate(record, toTypeId) {
|
|
349
|
+
async installMayMigrate(record, toTypeId, snapshot) {
|
|
307
350
|
const principal = this.principalId;
|
|
308
351
|
if (!principal || this.delegated)
|
|
309
352
|
return false;
|
|
@@ -335,27 +378,16 @@ export class ScopeAuthority {
|
|
|
335
378
|
}
|
|
336
379
|
if (!linked)
|
|
337
380
|
return false;
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
return true;
|
|
381
|
+
// Grants naming the app itself: an install reaches only families the
|
|
382
|
+
// owner named it to, whoever else holds them.
|
|
383
|
+
const held = await this.familiesConveying(principal, PRINCIPAL_SIDE, ['update-any'], snapshot);
|
|
384
|
+
return [...families].every((family) => held.includes(family));
|
|
344
385
|
}
|
|
345
386
|
/** Names of the type's top-level file-ref fields — the content-reference half of referencesFileId matching. */
|
|
346
387
|
async fileRefFieldNames(typeId) {
|
|
347
388
|
const type = await this.stack.getType(typeId);
|
|
348
389
|
return type ? fileRefFields(type.schema) : [];
|
|
349
390
|
}
|
|
350
|
-
/**
|
|
351
|
-
* Whether this request may widen who reaches a record, at create time or
|
|
352
|
-
* after. A delegated app may not, unless the owner is its principal:
|
|
353
|
-
* widening access is what containment most needs to hold.
|
|
354
|
-
* See docs/spec/access-control.md § Delegation: principal and subject.
|
|
355
|
-
*/
|
|
356
|
-
mayGrantAccess() {
|
|
357
|
-
return !this.delegated || this.principalId === this.stack.ownerEntityId;
|
|
358
|
-
}
|
|
359
391
|
/**
|
|
360
392
|
* Whether one identity, on its own, may decide who else reaches `record`
|
|
361
393
|
* — the owner-or-creator rule a reshare enforces, asked of one
|
|
@@ -370,15 +402,19 @@ export class ScopeAuthority {
|
|
|
370
402
|
/**
|
|
371
403
|
* Whether this request may decide who else reaches `record`: management
|
|
372
404
|
* for a `_group`, so a demoted creator keeps no side door; otherwise the
|
|
373
|
-
* owner-or-author rule, asked of both sides of a delegation
|
|
374
|
-
*
|
|
405
|
+
* owner-or-author rule, asked of both sides of a delegation, of a record
|
|
406
|
+
* the request can read. Asked of a create's Record before it exists too.
|
|
407
|
+
* See docs/spec/access-control.md § Write implies read.
|
|
375
408
|
*/
|
|
376
|
-
canReshare(record) {
|
|
377
|
-
if (
|
|
409
|
+
async canReshare(record, snapshot) {
|
|
410
|
+
if (familyPolicy(record.typeId).writers === 'group-managers') {
|
|
378
411
|
return this.isGroupManager(record);
|
|
412
|
+
}
|
|
379
413
|
if (!this.mayReshare(this.principalId, record))
|
|
380
414
|
return false;
|
|
381
|
-
|
|
415
|
+
if (this.delegated && !this.mayReshare(this.subjectId, record))
|
|
416
|
+
return false;
|
|
417
|
+
return this.canRead(record, snapshot);
|
|
382
418
|
}
|
|
383
419
|
}
|
|
384
420
|
//# sourceMappingURL=authority.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/scoped-stack/authority.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,EAClB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAejD,MAAM,OAAO,cAAc;IAEN;IAER;IAEA;IALX,YACmB,KAAY;IAC7B,iFAAiF;IACxE,WAA4B;IACrC,uFAAuF;IAC9E,SAA0B;QAJlB,UAAK,GAAL,KAAK,CAAO;QAEpB,gBAAW,GAAX,WAAW,CAAiB;QAE5B,cAAS,GAAT,SAAS,CAAiB;IAClC,CAAC;IAEa,aAAa,GAAG,CAAC,EAAU,EAA+B,EAAE,CAC3E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,sDAAsD;IAC7C,UAAU,GAAG,GAA2B,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjG,uEAAuE;IACvE,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS;QACX,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAChD,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;YAC9D,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,IAAI,gBAAgB;QAClB,OAAO,kBAAkB,CACvB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAC5D,IAAI,CAAC,KAAK,CAAC,aAAa,CACzB,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,aAAa,CAAC,MAAmB,EAAE,IAAgB;QACjD,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjG,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,QAAQ,CACpB,MAAc,EACd,OAAsB,EACtB,IAQC;QAED,MAAM,EACJ,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,QAAQ,GAAG,IAAI,EACf,YAAY,GAAG,IAAI,EACnB,UAAU,GAAG,IAAI,GAClB,GAAG,IAAI,CAAC;QACT,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,oEAAoE;QACpE,oEAAoE;QACpE,mCAAmC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,EAA4B,CAAC;QAE1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAElC,yEAAyE;QACzE,sEAAsE;QACtE,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzD,IAAI,YAA2B,CAAC;QAChC,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,YAAY,GAAG,gBAAgB,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,yDAAyD;YACzD,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAuB,CAAC;YACpC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,SAAS;YACpD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE;gBAClD,YAAY;gBACZ,UAAU;gBACV,UAAU;gBACV,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACvD,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO,MAAM,EAAE,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;gBACzF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,IAAI,OAAO;gBAAE,OAAO,IAAI,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,eAAe,CACb,MAAc,EACd,OAAsB,EACtB,gBAAgC;QAEhC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACH,cAAc,CACZ,MAAc,EACd,OAAsB,EACtB,gBAAgC;QAEhC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE;YACpC,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,gBAAgB;YAChB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,aAAa,CACX,MAAc,EACd,OAAsB,EACtB,OAII,EAAE;QAEN,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE;YACpC,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,MAAmB,EAAE,OAAe;QAClD,mEAAmE;QACnE,uEAAuE;QACvE,kEAAkE;QAClE,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACjF,OAAO,IAAI,kBAAkB,CAAC,sBAAsB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAmB,EACnB,gBAAgC,EAChC,UAA0C;QAE1C,MAAM,SAAS,GACb,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;gBACjE,MAAM;gBACN,gBAAgB;gBAChB,UAAU;aACX,CAAC,CAAC,CAAC;QACN,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,SAAS,GACb,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,MAAmB;QAChC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,iFAAiF;IACzE,YAAY,CAAC,QAAyB,EAAE,MAAmB;QACjE,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACvD,OAAO,yBAAyB,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,OAAO,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,MAAc;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;QAEvD,MAAM,KAAK,GAAG,MAAM,cAAc,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,sEAAsE;QACtE,yCAAyC;QACzC,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAC/D,CAAC,MAAM,EAAE,EAAE,CACT,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,YAAY,CAAC,UAAU;YACnD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,CACrD,CAAC;QACF,OAAO,KAAK,KAAK,SAAS,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAEvC,oEAAoE;QACpE,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAElC,sEAAsE;QACtE,wEAAwE;QACxE,+DAA+D;QAC/D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAE7D,oEAAoE;QACpE,qEAAqE;QACrE,iEAAiE;QACjE,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,CACE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrB,MAAM,EAAE;oBACN,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,IAAI;oBACtC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;oBACxC,OAAO,EAAE,EAAE,MAAM,EAAE;oBACnB,eAAe,EAAE,IAAI;iBACtB;gBACD,KAAK,EAAE,CAAC;aACT,CAAC,CACH,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,CACE,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9C,MAAM,EAAE;oBACN,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,IAAI;oBACtC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;oBACxC,eAAe,EAAE,IAAI;iBACtB;aACF,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,OAA6B,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACxE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAmB,EAAE,QAAgB;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,OAAgE,CAAC;QACrE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACjF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzC,IAAI,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC;YAChF,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC7D,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3F,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,CAAC,GAAG,EAAE,CAAC;gBACvD,IAAK,IAAI,CAAC,OAAsB,CAAC,GAAG,KAAK,SAAS;oBAAE,MAAM,GAAG,IAAI,CAAC;YACpE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACxF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+GAA+G;IAC/G,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,cAAc;QACZ,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAC1E,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAC,QAAyB,EAAE,MAAmB;QAC/D,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,OAAO,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,QAAQ,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;IAC3F,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,MAAmB;QAC5B,IAAI,aAAa,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/scoped-stack/authority.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System family policies
|
|
3
|
+
* -------------------------------------------------------
|
|
4
|
+
* The rules a system family holds a scoped writer to on top of the
|
|
5
|
+
* ordinary gates: who may write its Records at all, which content values
|
|
6
|
+
* are the owner's alone to set, and what a create must already be able to
|
|
7
|
+
* reach. One entry per family, read by every verb through the questions
|
|
8
|
+
* below, so a rule reaches each verb that writes what it governs — create,
|
|
9
|
+
* patchContent(), restoreVersion() and commitMigration() alike — rather
|
|
10
|
+
* than only the ones that remembered to ask it.
|
|
11
|
+
*
|
|
12
|
+
* A family with no entry is ordinary. Grants on a family are refused
|
|
13
|
+
* separately, at the write and at evaluation (UNGRANTABLE_SYSTEM_TYPES in
|
|
14
|
+
* grants.ts), since a grant is not a scoped write.
|
|
15
|
+
*
|
|
16
|
+
* See docs/spec/access-control.md § Per-verb gates.
|
|
17
|
+
*/
|
|
18
|
+
import type { EntityId, TypeId } from '../types/index.js';
|
|
19
|
+
/**
|
|
20
|
+
* Who may write a Record of a family, whatever its own `permissions` and
|
|
21
|
+
* any grant say: anyone the ordinary write gate admits, the owner acting
|
|
22
|
+
* alone, or the Group's admins and the owner.
|
|
23
|
+
*/
|
|
24
|
+
export type FamilyWriters = 'ordinary' | 'owner-alone' | 'group-managers';
|
|
25
|
+
type FamilyPolicy = {
|
|
26
|
+
writers: FamilyWriters;
|
|
27
|
+
/**
|
|
28
|
+
* Content fields only the owner acting alone may set, and when: `any`
|
|
29
|
+
* change, or only a value naming the owner's own DID.
|
|
30
|
+
*/
|
|
31
|
+
ownerFields?: {
|
|
32
|
+
fields: readonly string[];
|
|
33
|
+
when: 'any' | 'owner-did';
|
|
34
|
+
message: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A content field naming a file a non-owner create must already be able
|
|
38
|
+
* to read through some other Record — see docs/spec/attachments.md
|
|
39
|
+
* § Creating `_attachment@1` records directly.
|
|
40
|
+
*/
|
|
41
|
+
createNamesFile?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Whether `relationship` associations are a roster naming Entities
|
|
44
|
+
* rather than references to readable Records, and so carry no
|
|
45
|
+
* reference gate — see docs/spec/access-control.md § Reference-creation gating.
|
|
46
|
+
*/
|
|
47
|
+
rosterAssociations?: boolean;
|
|
48
|
+
};
|
|
49
|
+
/** The policy a Record of `typeId` is held to. */
|
|
50
|
+
export declare const familyPolicy: (typeId: TypeId) => FamilyPolicy;
|
|
51
|
+
/**
|
|
52
|
+
* The refusal a write owes when it moves content only the owner acting
|
|
53
|
+
* alone may set, or null when it moves none. Compared value-wise between
|
|
54
|
+
* `before` (absent at create) and `after`, so re-sending a value a Record
|
|
55
|
+
* already holds claims nothing.
|
|
56
|
+
*/
|
|
57
|
+
export declare const ownerFieldRefusal: (typeId: TypeId, before: Record<string, unknown> | undefined, after: Record<string, unknown>, ownerEntityId: EntityId) => string | null;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=family-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"family-policy.d.ts","sourceRoot":"","sources":["../../src/scoped-stack/family-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE1E,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,KAAK,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAoCF,kDAAkD;AAClD,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,YACF,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,eAAe,QAAQ,KACtB,MAAM,GAAG,IAQX,CAAC"}
|