echoing-postman-28418
02/21/2024, 7:24 AMclass Folder implements Namespace {
related: {
parents: (File | Folder)[];
viewers: SubjectSet<Group, "members">[];
};
permits = {
view: (ctx: Context): boolean =>
this.related.viewers.includes(ctx.subject) ||
this.related.parents.traverse((p) => p.permits.view(ctx)),
};
}
class File implements Namespace {
related: {
parents: (File | Folder)[];
viewers: (User | SubjectSet<Group, "members">)[];
owners: (User | SubjectSet<Group, "members">)[];
};
permits = {
view: (ctx: Context): boolean =>
this.related.parents.traverse((p) => p.permits.view(ctx)) ||
this.related.viewers.includes(ctx.subject) ||
this.related.owners.includes(ctx.subject),
edit: (ctx: Context) => this.related.owners.includes(ctx.subject),
};
}