gifted-leather-28437
03/08/2023, 11:07 AM{
"amr": [
"password"
],
"aud": [
"xxxxxx-4dc9-8094-7d4926d3350e"
],
"auth_time": 1678204037,
"email": "<mailto:mounir@domain.de|mounir@domain.de>",
"email_verified": True,
"iat": 1678204043,
"iss": "https: //pedantic-kilby-s9jc724ku9.projects.oryapis.com",
"rat": 1678204033,
"sub": "zxxxxxxx-d186-4251-8369-xxxxxxx"
}
Those are the relationships defined in the UI (I set them using the CLI)
I’m using the default permissions modelling/rules:
import { Namespace, SubjectSet, Context } from "@ory/permission-namespace-types"
/*
Define your OPL rules here. Some examples:
*/
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">)[]
}
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),
}
}
thanks in advance 🙂steep-lamp-91158
gifted-leather-28437
03/08/2023, 12:29 PM