shy-beach-55709
06/02/2023, 1:10 PMsteep-lamp-91158
shy-beach-55709
06/05/2023, 2:46 PM// @ts-nocheck
class User implements Namespace {
}
class Document implements Namespace {
related: {
owner: User[]
editor: User[]
viewer: User[]
}
permits = {
view: (ctx: Context): boolean =>
this.related.viewer.includes(ctx.subject) ||
this.related.editor.includes(ctx.subject) ||
this.related.owner.includes(ctx.subject),
edit: (ctx: Context): boolean =>
this.related.editor.includes(ctx.subject) ||
this.related.owner.includes(ctx.subject),
delete: (ctx: Context): boolean =>
this.related.owner.includes(ctx.subject),
share: (ctx: Context): boolean =>
this.related.owner.includes(ctx.subject),
}
}
class Folder implements Namespace {
related: {
owner: User[]
editor: User[]
viewer: User[]
}
permits = {
view: (ctx: Context): boolean =>
this.related.viewer.includes(ctx.subject) ||
this.related.editor.includes(ctx.subject) ||
this.related.owner.includes(ctx.subject),
edit: (ctx: Context): boolean =>
this.related.editor.includes(ctx.subject) ||
this.related.owner.includes(ctx.subject),
delete: (ctx: Context): boolean =>
this.related.owner.includes(ctx.subject),
share: (ctx: Context): boolean =>
this.related.owner.includes(ctx.subject),
}
}
steep-lamp-91158
class User implements Namespace {}
class Document implements Namespace {
related: {
viewer: User[]
parent: Folder[]
}
permits = {
view: (ctx: Context): boolean =>
this.related.viewer.includes(ctx.subject) &&
this.related.parent.traverse(folder => folder.permits.view(ctx)),
}
}
class Folder implements Namespace {
related: {
...
}
permits = {
view: (ctx: Context): boolean => ...
}
}
shy-beach-55709
06/06/2023, 11:00 PM