hundreds-match-36539
05/09/2023, 9:08 AMimport { Namespace, SubjectSet, Context } from "@ory/keto-namespace-types"
class User implements Namespace {
related: {
manager: User[]
}
}
class Group implements Namespace {
related: {
members: (User | Group)[]
}
}
class 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">)[]
}
// Some comment
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),
}
}
Our userId would be stored in our app database, so would we also store in our database whether that userId is a part of viewers of a particular File?
Like I get that we can define a permission model, but I don't get how we connect or map this with user ids and resources (e.g. File or Folder) in our app database tables.
I can't seem to find any good examples of how to do this. Thanks for helping this noob 😄proud-plumber-24205
05/09/2023, 9:46 AMhundreds-match-36539
05/09/2023, 9:53 AMuserId and File isn't in fact stored in our app database at all, it's basically the "Relationships" feature of Ory-Network as the database for this... yes?proud-plumber-24205
05/09/2023, 10:00 AMhundreds-match-36539
05/09/2023, 10:01 AM