@nxgt/janus 0.2.2 → 0.3.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.
Files changed (31) hide show
  1. package/README.md +48 -11
  2. package/dist/chunks/{index-hm4v76kd.js → index-53y1afjz.js} +2 -2
  3. package/dist/chunks/{index-0xarpm7z.js → index-8tksqzkr.js} +2 -2
  4. package/dist/chunks/{index-fgb3t64y.js → index-mgh85djb.js} +2 -2
  5. package/dist/chunks/{index-6p56fpbe.js → index-qwfkhqkk.js} +22 -4
  6. package/dist/chunks/{index-6p56fpbe.js.map → index-qwfkhqkk.js.map} +4 -4
  7. package/dist/conformance/index.js +3 -3
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +8 -4
  11. package/dist/index.js.map +2 -2
  12. package/dist/permissions/index.js +47 -21
  13. package/dist/permissions/index.js.map +6 -6
  14. package/dist/permissions/input.d.ts +5 -3
  15. package/dist/permissions/input.d.ts.map +1 -1
  16. package/dist/permissions/model.d.ts +19 -8
  17. package/dist/permissions/model.d.ts.map +1 -1
  18. package/dist/permissions/resolve.d.ts.map +1 -1
  19. package/dist/permissions/reverse.d.ts.map +1 -1
  20. package/dist/subjects/notation.d.ts +7 -3
  21. package/dist/subjects/notation.d.ts.map +1 -1
  22. package/dist/subjects/subject.d.ts +53 -0
  23. package/dist/subjects/subject.d.ts.map +1 -1
  24. package/docs/guide/permissions.md +50 -18
  25. package/docs/guide/vocabulary.md +7 -4
  26. package/docs/roadmap.md +5 -0
  27. package/docs/troubleshooting.md +18 -3
  28. package/package.json +1 -1
  29. /package/dist/chunks/{index-hm4v76kd.js.map → index-53y1afjz.js.map} +0 -0
  30. /package/dist/chunks/{index-0xarpm7z.js.map → index-8tksqzkr.js.map} +0 -0
  31. /package/dist/chunks/{index-fgb3t64y.js.map → index-mgh85djb.js.map} +0 -0
@@ -21,6 +21,7 @@
21
21
  * names, cycles — is refused by {@link defineModel} with a `TypeError`.
22
22
  */
23
23
  import type { CursorPage } from '../pagination/cursor-page';
24
+ import type { NotASet, SetOf } from '../subjects/subject';
24
25
  import { type ResolvedModel } from './resolve';
25
26
  /**
26
27
  * The ids of the objects whose field names this subject id — what `list()`
@@ -156,11 +157,18 @@ export type ObjectRef<C extends ModelConfig, T extends ObjectTypeOf<C>> = {
156
157
  } & {
157
158
  readonly [F in FieldsOf<C, T>]: string | null;
158
159
  };
159
- /** A subject: a user from `janus()` as it is, or an object. */
160
- export interface SubjectRef<C extends ModelConfig> {
160
+ /**
161
+ * A subject: a user from `janus()` as it is, an object, or a subject set —
162
+ * one `setOf()` made on an object type and one of its relations. A set on a
163
+ * user type the model does not also declare under `types` has no relation to
164
+ * name, and is refused here as at run time.
165
+ */
166
+ export type SubjectRef<C extends ModelConfig> = ({
161
167
  readonly type: UserTypeOf<C> | ObjectTypeOf<C>;
162
168
  readonly id: string;
163
- }
169
+ } & NotASet) | {
170
+ [T in ObjectTypeOf<C>]: SetOf<T, RelationsOf<TypesOf<C>, T> & string>;
171
+ }[ObjectTypeOf<C>];
164
172
  type UnionToIntersection<U> = (U extends unknown ? (union: U) => void : never) extends (intersection: infer I) => void ? I : never;
165
173
  type CtxOfRule<E> = E extends When<string, infer X> ? X : never;
166
174
  type NameOfRule<E> = E extends string ? E : E extends When<infer R, never> ? R : never;
@@ -254,16 +262,18 @@ export type List<C extends ModelConfig> = <T extends ObjectTypeOf<C>, P extends
254
262
  export type GrantableOf<C extends ModelConfig, T extends ObjectTypeOf<C>> = StoredRelationsOf<TypesOf<C>, T>;
255
263
  /**
256
264
  * Who may be granted relation `R` on an object of type `T`: an entity of each
257
- * subject type it names, and a subject set for each set it names.
265
+ * subject type it names, and a subject set for each set it names — made by
266
+ * `setOf()` when the set is on a user type, since a user passed as it is stays
267
+ * that user.
258
268
  */
259
- export type HolderOf<C extends ModelConfig, T extends ObjectTypeOf<C>, R> = RelationDefOf<TypesOf<C>, T, R> extends readonly (infer E)[] ? E extends `${infer SetType}#${infer SetRelation}` ? {
269
+ export type HolderOf<C extends ModelConfig, T extends ObjectTypeOf<C>, R> = RelationDefOf<TypesOf<C>, T, R> extends readonly (infer E)[] ? E extends `${infer SetType}#${infer SetRelation}` ? SetType extends UserTypeOf<C> ? SetOf<SetType, SetRelation> : {
260
270
  readonly type: SetType;
261
271
  readonly id: string;
262
272
  readonly relation: SetRelation;
263
273
  } : {
264
274
  readonly type: E;
265
275
  readonly id: string;
266
- } : never;
276
+ } & NotASet : never;
267
277
  /** Writes one tuple, or removes it: typed like `can()`. */
268
278
  export type Grant<C extends ModelConfig> = <T extends ObjectTypeOf<C>, R extends GrantableOf<C, T>>(object: {
269
279
  readonly type: T;
@@ -369,8 +379,9 @@ export interface PermissionModel<C extends ModelConfig = ModelConfig> {
369
379
  * ```
370
380
  *
371
381
  * Refuses with a `TypeError` what only running it can see: a name that is not
372
- * camelCase, an object type named like a user type, a permission that reaches
373
- * itself without crossing a relation — which no data could ever end.
382
+ * camelCase, a permission that reaches itself without crossing a relation —
383
+ * which no data could ever end. A user type may also be an object type: its
384
+ * users are then objects too, and a set on it is written with `setOf()`.
374
385
  */
375
386
  export declare function defineModel<const Subjects extends readonly string[], const Ts extends ModelConfig['types'] & ModelTypesOf<Subjects[number], Ts>>(config: {
376
387
  readonly subjects: Subjects;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/permissions/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/permissions/model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/permissions/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wEAAwE;AACxE,MAAM,MAAM,MAAM,GACf;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ5E;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAChE;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CACnE,CAAC;AAEL,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,CACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,CACH,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACxD;AAgBD,wBAAgB,YAAY,CAC3B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACX,aAAa,CAmHf"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/permissions/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wEAAwE;AACxE,MAAM,MAAM,MAAM,GACf;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ5E;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAChE;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CACnE,CAAC;AAEL,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,CACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,CACH,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACxD;AAwBD,wBAAgB,YAAY,CAC3B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACX,aAAa,CAkBf"}
@@ -1 +1 @@
1
- {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../src/permissions/reverse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEN,KAAK,aAAa,EAGlB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAO;IAOlB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX1B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAGL,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM;IAG5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAcvE,gFAAgF;IAChF,OAAO,CAAC,IAAI;IAOZ,8EAA8E;YAChE,KAAK;YA2BL,QAAQ;YAgCR,UAAU;IAmBxB,oGAAoG;YACtF,KAAK;IAgCnB,+CAA+C;YACjC,OAAO;IAqBrB,yEAAyE;YAC3D,MAAM;IAoBpB,gEAAgE;IAChE,OAAO,CAAC,MAAM;CAYd"}
1
+ {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../src/permissions/reverse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEN,KAAK,aAAa,EAGlB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAO;IAOlB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX1B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAGL,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM;IAG5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAcvE,gFAAgF;IAChF,OAAO,CAAC,IAAI;IAOZ,8EAA8E;YAChE,KAAK;YA2BL,QAAQ;YAgCR,UAAU;IAmBxB,oGAAoG;YACtF,KAAK;IAiCnB,+CAA+C;YACjC,OAAO;IAqBrB,yEAAyE;YAC3D,MAAM;IAoBpB,gEAAgE;IAChE,OAAO,CAAC,MAAM;CAYd"}
@@ -1,4 +1,4 @@
1
- import { type Entity, type RelationTuple, type Subject } from './subject';
1
+ import { type Entity, type RelationTuple, type SetOf, type Subject } from './subject';
2
2
  /**
3
3
  * Zanzibar's notation, with typed subjects:
4
4
  *
@@ -30,6 +30,10 @@ export declare function formatTuple(tuple: RelationTuple): string;
30
30
  * developer's own code.
31
31
  */
32
32
  export declare function parseTuple(text: string): RelationTuple;
33
- /** Reads one subject back: `staff:u1`, or `team:t1#member`. */
34
- export declare function parseSubject(text: string): Subject;
33
+ /**
34
+ * Reads one subject back: `staff:u1`, or `team:t1#member`. A set is answered
35
+ * as `setOf()` makes it, so `can()` and `grant()` read it as the set it names
36
+ * on a user type too.
37
+ */
38
+ export declare function parseSubject(text: string): Entity | SetOf;
35
39
  //# sourceMappingURL=notation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notation.d.ts","sourceRoot":"","sources":["../../src/subjects/notation.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,MAAM,EAEX,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAExD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAkBtD;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBlD"}
1
+ {"version":3,"file":"notation.d.ts","sourceRoot":"","sources":["../../src/subjects/notation.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,MAAM,EAEX,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,OAAO,EAEZ,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAExD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAkBtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAiBzD"}
@@ -72,4 +72,57 @@ export declare function subjectOf(user: {
72
72
  readonly type: string;
73
73
  readonly id: SubjectId;
74
74
  }): Entity;
75
+ /**
76
+ * The mark `setOf()` puts on a set: a symbol property, so it survives a spread
77
+ * and `Object.assign`, and no value read from a database or from JSON can
78
+ * carry it. Registered with `Symbol.for`, so two copies of this module — two
79
+ * bundles, two entry points — still agree on it.
80
+ */
81
+ declare const SET_OF: unique symbol;
82
+ /**
83
+ * A subject set `setOf()` made: everyone who holds `relation` on `type:id`.
84
+ *
85
+ * Marked, because a user is passed to `can()` and `grant()` as it is, fields
86
+ * flat on it: a user whose fields include `relation` must stay that user, and
87
+ * never read as the set of whoever holds that relation on them. For an object
88
+ * type, `{ type, id, relation }` is a set as written; for a user type — one
89
+ * the model also declares as an object type — only `setOf()` makes one.
90
+ *
91
+ * A spread keeps the mark. `JSON.stringify` and `structuredClone` drop it:
92
+ * through either, a set comes back as a user — call `setOf()` again, or
93
+ * `parseSubject()` on its notation.
94
+ */
95
+ export type SetOf<Type extends string = string, Relation extends string = string> = SubjectSet & {
96
+ readonly type: Type;
97
+ readonly relation: Relation;
98
+ readonly [SET_OF]: true;
99
+ };
100
+ /**
101
+ * A user or an object, never a set `setOf()` made: where a relation admits
102
+ * `staff` but not `staff#managers`, a set passed there is refused at compile
103
+ * time as it is at run time.
104
+ */
105
+ export type NotASet = {
106
+ readonly [SET_OF]?: never;
107
+ };
108
+ /**
109
+ * Everyone who holds `relation` on this user or object — `staff:s1#managers`.
110
+ *
111
+ * ```ts
112
+ * await access.grant(record, 'viewers', setOf(ada, 'managers'));
113
+ * ```
114
+ *
115
+ * Copies `type` and `id` only, like {@link subjectOf}: none of a user's own
116
+ * fields reaches a tuple.
117
+ */
118
+ export declare function setOf<const Type extends string, const Relation extends string>(entity: {
119
+ readonly type: Type;
120
+ readonly id: SubjectId;
121
+ }, relation: Relation): SetOf<Type, Relation>;
122
+ /**
123
+ * Whether `setOf()` made this value, or a spread of one — what `can()` and
124
+ * `grant()` read to tell a set on a user type from a user.
125
+ */
126
+ export declare function isSetOf(value: unknown): value is SetOf;
127
+ export {};
75
128
  //# sourceMappingURL=subject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/subjects/subject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAW,SAAQ,MAAM;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;CACvB,GAAG,MAAM,CAET"}
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/subjects/subject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAW,SAAQ,MAAM;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;CACvB,GAAG,MAAM,CAET;AAED;;;;;GAKG;AACH,QAAA,MAAM,MAAM,EAAE,OAAO,MAAwC,CAAC;AAE9D;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,KAAK,CAChB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,QAAQ,SAAS,MAAM,GAAG,MAAM,IAC7B,UAAU,GAAG;IAChB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,CAAC,QAAQ,SAAS,MAAM,EAC7E,MAAM,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;CAAE,EACvD,QAAQ,EAAE,QAAQ,GAChB,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAkBvB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAMtD"}
@@ -182,8 +182,6 @@ the key you wrote, `types.record.permits.view` or `types.team.related.members`:
182
182
  - `relations` or `permissions` — the keys before 0.2 — and any key other than
183
183
  `related` and `permits`;
184
184
  - a name that is not camelCase;
185
- - an object type named like a user type — see
186
- [permissions on a user](#permissions-on-a-user);
187
185
  - a permission that reaches itself without crossing a relation (`view:
188
186
  ['edit'], edit: ['view']`) — no data could ever end that loop;
189
187
  - a subject set or an arrow that would have to read **another** object's
@@ -196,8 +194,8 @@ fine: the data ends it. See [a hierarchy](#a-hierarchy).
196
194
  ## Use cases
197
195
 
198
196
  Each case below runs against the clinic above, in order — except the two that
199
- say otherwise: a folder tree for a hierarchy, and an `account` for
200
- permissions on a user.
197
+ say otherwise: a folder tree for a hierarchy, and staff members who manage
198
+ each other for permissions on a user.
201
199
 
202
200
  ### A direct relation
203
201
 
@@ -231,6 +229,10 @@ await access.grant(team, 'members', { type: 'team', id: 't2', relation: 'members
231
229
  await access.can(grace, 'view', team); // true: grace is a member of t2, whose members are members of t1
232
230
  ```
233
231
 
232
+ `setOf(cardiology, 'members')`, from `@nxgt/janus`, writes the same set. On an
233
+ object type the two are the same; on a user type only `setOf` makes a set —
234
+ see [permissions on a user](#permissions-on-a-user).
235
+
234
236
  The set is followed as the data stands: revoke grace from `t2`, and she no
235
237
  longer views `t1`. A team member of itself — a cycle in the data — is cut, and
236
238
  is not an error.
@@ -347,38 +349,68 @@ await access.list(grace, 'edit', 'record', { ctx: { onShift: true } });
347
349
 
348
350
  ### Permissions on a user
349
351
 
350
- A user type cannot also be an object type: `defineModel` refuses `staff` in
351
- `types` — `"staff" names a user type and an object type`. To decide who may
352
- edit a staff member's account, declare an object type **whose id is the
353
- user's id**, and read it with `fromField('id', …)`:
352
+ A user type may also be an object type: declare `staff` under `types`, and a
353
+ staff member is an object like a record — asked `can()`, granted relations,
354
+ listed. To decide who may edit a staff member, give `staff` the relations that
355
+ say so:
354
356
 
355
357
  ```ts
356
- const accounts = permissions({
358
+ import { setOf } from '@nxgt/janus';
359
+
360
+ const people = permissions({
357
361
  model: defineModel({
358
362
  subjects: auth.types,
359
363
  types: {
360
- account: {
364
+ staff: {
361
365
  related: {
362
366
  self: fromField('id', 'staff', { lookup: async (staffId) => [staffId] }),
363
- managers: ['staff'],
367
+ managers: ['staff', 'staff#managers'],
364
368
  },
365
369
  permits: { edit: ['self', 'managers'] },
366
370
  },
371
+ note: {
372
+ related: { readers: ['staff', 'staff#managers'] },
373
+ permits: { read: ['readers'] },
374
+ },
367
375
  },
368
376
  }),
369
377
  store: relations,
370
378
  });
371
379
 
372
380
  const bob = await auth.staff.create({ username: 'bob' });
373
- await accounts.can(bob, 'edit', { type: 'account', id: bob.id }); // true: his own account
374
- await accounts.can(ada, 'edit', { type: 'account', id: bob.id }); // false
375
- await accounts.grant({ type: 'account', id: bob.id }, 'managers', ada);
376
- await accounts.can(ada, 'edit', { type: 'account', id: bob.id }); // true: she manages it
377
- await accounts.list(ada, 'edit', 'account'); // her own account, and bob's
381
+ await people.can(bob, 'edit', bob); // true: himself, read from his id
382
+ await people.can(ada, 'edit', bob); // false
383
+ await people.grant(bob, 'managers', ada);
384
+ await people.can(ada, 'edit', bob); // true: she manages him
385
+ await people.list(ada, 'edit', 'staff'); // herself, and bob
386
+ ```
387
+
388
+ **A user passed as it is, is that user** — never a set, even when one of its
389
+ fields is named `relation`. A set on a user type is made by **`setOf`**: every
390
+ staff member who manages bob reads the note, as the data stands:
391
+
392
+ ```ts
393
+ const note = { type: 'note', id: 'n1' } as const;
394
+ await people.grant(note, 'readers', setOf(bob, 'managers'));
395
+ await people.can(ada, 'read', note); // true: she manages bob
396
+ await people.can(bob, 'read', note); // false: bob is not his own manager
378
397
  ```
379
398
 
380
- The `lookup` answers the one account whose id is the subject's, so `list()`
381
- finds a user's own account too.
399
+ Only `setOf` marks a set. `{ type: 'staff', id: bob.id, relation: 'managers' }`
400
+ written out is bob himself at run time: granted silently where the relation
401
+ admits a staff member, refused where it does not. The compiler refuses it in
402
+ `grant()` and `revoke()`; `can()` and `list()` accept it and ask about bob, a
403
+ gap the README names. A spread
404
+ of a set keeps the mark; `JSON` and `structuredClone` drop it, so a set read
405
+ back from either is bob again — call `setOf` on it, or keep its notation
406
+ (`staff:…#managers`), which `parseSubject` reads back as the set. It copies
407
+ `type` and `id` only, so none of bob's fields reaches a tuple. A set on a user type
408
+ the model does not also declare under `types` is refused by `can()`, `list()`,
409
+ `grant()` and `revoke()` — and by the compiler first: there is no relation to
410
+ hold.
411
+
412
+ The `lookup` of `self` answers the one staff member whose id is the subject's,
413
+ so `list()` finds ada herself too.
382
414
 
383
415
  ## `permissions()`
384
416
 
@@ -37,7 +37,7 @@ either finds this row.
37
37
  | Word | Means | Not |
38
38
  | --- | --- | --- |
39
39
  | **user** | One stored person or machine, of one user type | "account" — kept only in *account takeover* and *account enumeration*, the names of those attacks |
40
- | **user type** | A kind of user with its own schema and login: `staff`, `patient`. Wired to permissions, its name is a subject type | "role": a role is a relation in the model |
40
+ | **user type** | A kind of user with its own schema and login: `staff`, `patient`. Wired to permissions, its name is a subject type — and may also be an object type, whose users are then objects too | "role": a role is a relation in the model |
41
41
  | **schema** | A user type's Standard Schema: the fields a user carries | the model |
42
42
  | **login** | The value a user signs in with: an e-mail, a username. **sign in** is the verb, **sign-in** the noun | "identifier" |
43
43
  | **credential** | What a caller presents to prove who they are: a login and a password at sign-in (`CredentialError`, `CREDENTIALS_INVALID`), or a token on a request — always written *session credential* | |
@@ -57,10 +57,11 @@ either finds this row.
57
57
  | --- | --- | --- |
58
58
  | **model** | What `defineModel()` answers: the subject types, the object types, their relations and permissions | "schema", "policy" |
59
59
  | **subject type** | A name listed in `subjects`: `auth.types` when wired to `janus()`, your own names otherwise | |
60
- | **object** | What a permission is about: `{ type: 'document', id }` | "resource" |
60
+ | **object** | What a permission is about: `{ type: 'document', id }`, or a user whose type the model also declares under `types` | "resource" |
61
61
  | **subject** | Who a permission is about: a user, an object, or a subject set | "principal", "actor" |
62
62
  | **entity** | `{ type, id }`: a user or an object — a subject that is not a set (`Entity`, `deleteEntity`) | |
63
- | **subject set** | Everyone holding one relation on one object: `team:t1#members` | "group" — a group is an object with a `members` relation |
63
+ | **subject set** | Everyone holding one relation on one object: `team:t1#members`. On a user type the model also declares as an object type, only `setOf()` makes one | "group" — a group is an object with a `members` relation |
64
+ | **`setOf`** | The function that makes a subject set from a user or an object and a relation: `setOf(bob, 'managers')`. What it answers is a `SetOf`, and `isSetOf` tells it from a user | |
64
65
  | **relation** | A named link, stored as tuples or read from a field (`fromField`). Declared under `related`, named in the plural: `members`, `doctors` | |
65
66
  | **`related`** | The key of an object type that declares its relations: `related: { members: ['staff'] }`. It was `relations` before 0.2, and the old key is refused | "relations" as a key — the word stays for the idea, and for `janus({ relations })` |
66
67
  | **holder** | What a relation admits: `'staff'`, or the subject set `'team#members'` | |
@@ -114,10 +115,12 @@ a tuple.
114
115
  | --- | --- |
115
116
  | `subjectOf(user)` | `{ type, id }` of any object carrying both |
116
117
  | `isSubjectSet(subject)` | whether `relation` is a string |
118
+ | `setOf(entity, relation)` | the subject set `{ type, id, relation }`, marked: on a user type, the only way to write one |
119
+ | `isSetOf(value)` | whether `setOf` made it, or a spread of it |
117
120
  | `formatEntity(entity)` | `'record:r1'` |
118
121
  | `formatSubject(subject)` | `'staff:u1'`, or `'team:t1#members'` |
119
122
  | `formatTuple(tuple)` | `'team:t1#members@team:t2#members'` |
120
- | `parseSubject(text)` | the `Subject` back |
123
+ | `parseSubject(text)` | the `Entity` back, or a `SetOf` — a set as `setOf` makes it |
121
124
  | `parseTuple(text)` | the `RelationTuple` back |
122
125
 
123
126
  ```ts
package/docs/roadmap.md CHANGED
@@ -84,6 +84,11 @@ Nothing yet.
84
84
 
85
85
  Each entry names the version it came in.
86
86
 
87
+ - **Permissions on a user, v0.3.0** — a user type may also be an object type:
88
+ a staff member is the object `can()` asks about and is granted relations
89
+ on, like a record, and `grant(note, 'readers', setOf(bob, 'managers'))`
90
+ grants everyone who manages bob at once. A user
91
+ passed as it is stays that user, even with a field named `relation`.
87
92
  - **The adapters and the kit, each at its first release, v0.1.0, beside
88
93
  `@nxgt/janus` 0.2.2** —
89
94
  [`@nxgt/janus-drizzle`](https://www.npmjs.com/package/@nxgt/janus-drizzle),
@@ -571,11 +571,12 @@ Each is a `TypeError` naming the call. TypeScript refuses most of them on the ar
571
571
  | Message | Fix |
572
572
  | --- | --- |
573
573
  | `can: "<name>" is not a relation or a permission of <type>` | Ask a name the type declares. |
574
- | `<call>: "<type>" is not an object type of the model` | Use a type declared under `types`. |
574
+ | `<call>: "<type>" is not an object type of the model` | Use a type declared under `types`. Also for a subject set — `setOf` included — whose type is neither a user type nor an object type. |
575
575
  | `<call>: the object must be { type, id, …its fields }` | `{ type: 'record', ...record }`. |
576
576
  | `<call>: the subject must be a user, or { type, id }` | Pass the user from `janus()`, or `{ type, id }`. `null` is anonymous and answers `false`. |
577
577
  | `<call>: the object id must be a non-empty string without @, # or parentheses` | Also for `the subject id`. Those characters belong to the tuple notation. |
578
- | `<call>: "<relation>" is not a relation of <type>, so <type>:<id>#<relation> is no subject set` | A subject set names a relation of its type: `{ type: 'team', id, relation: 'members' }`. |
578
+ | `<call>: "<relation>" is not a relation of <type>, so <type>#<relation> is no subject set` | A subject set names a relation of its type: `{ type: 'team', id, relation: 'members' }`. |
579
+ | `<call>: <type> is a user type the model does not declare as an object type, so <type>#<relation> is no subject set` | `setOf(user, relation)` names a relation on that user: declare the user type under `types` too, with that relation — see [permissions on a user](guide/permissions.md#permissions-on-a-user). The compiler refuses it first. |
579
580
  | `grant: "<relation>" is not a relation of <type>` | Grant a relation, never a permission. |
580
581
  | `list: the type must be an object type of the model` | The third argument is a type name: `'record'`. |
581
582
  | `list: after must be the nextCursor of a page, or null` | Pass `nextCursor` back as it came. |
@@ -594,7 +595,6 @@ most common:
594
595
  | `defineModel: types declares no object type` | Declare at least one type under `types`. |
595
596
  | `defineModel: types.<type> must be an object` | Also `types.<type>.related must be an object` and `types.<type>.permits must be an object`: each is keyed by name — `related: { members: ['staff'] }`. |
596
597
  | `defineModel: the object type "<name>" must be a camelCase name — letters and digits, starting with a lowercase letter` | Also `types.<type>.related: "<name>" must be a camelCase name — …` for a relation, and `types.<type>.permits: …` for a permission. |
597
- | `defineModel: "<name>" names a user type and an object type; a subject of type "<name>" would be ambiguous` | Rename the object type. For permissions on a user, see [the guide](guide/permissions.md#permissions-on-a-user). |
598
598
  | `defineModel: types.<type>: "<name>" names a relation and a permission; rename one` | One name, one meaning. |
599
599
  | `defineModel: types.<type>.related.<relation> must be a non-empty array of subject types, or fromField()` | `members: ['staff']`, or `doctors: fromField('doctorId', 'staff')`. |
600
600
  | `defineModel: types.<type>.related.<relation>: "<holder>" is not a subject type` | Also `"<holder>" is not a subject set — it must name an object type and one of its relations`: `'team#members'`, a declared type and one of its relations. |
@@ -634,6 +634,21 @@ parseTuple('record:r1#teams@team:t1');
634
634
  parseTuple('team:t1#members@team:t2#members');
635
635
  ```
636
636
 
637
+ ### `setOf: pass a user or { type, id }, then a relation`
638
+
639
+ Also `setOf: the relation must be a non-empty string`.
640
+
641
+ **When:** `setOf(...)`, a `TypeError`.
642
+ **Why:** a set is everyone holding one relation on one user or object: it needs both.
643
+ **Fix:**
644
+
645
+ ```ts
646
+ import { setOf } from '@nxgt/janus';
647
+
648
+ setOf(bob, 'managers'); // a user from janus()
649
+ setOf({ type: 'team', id: 't1' }, 'members'); // an object
650
+ ```
651
+
637
652
  ---
638
653
 
639
654
  ## Conformance (adapter authors)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxgt/janus",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Embeddable, type-safe identities and permissions: bring your own database",
5
5
  "license": "MIT",
6
6
  "type": "module",