ptrharmonic
06/28/2024, 10:03 PMpython
from django_spicedb.perms.models import PermissionModel, Relation, Self
class User(PermissionModel):
pass
class Organization(PermissionModel):
admin = Relation(User)
is_public = Relation(User, wildcard=True)
member = Relation(User) | Relation(User, wildcard=True)
read_all_docs = admin
class Folder(PermissionModel):
org_parent = Relation(Self) | Relation(Organization)
parent = Relation(Self)
reader = Relation(User)
read = reader + parent.read
class Document(PermissionModel):
parent = Relation(Folder)
reader = Relation(User)
view = reader + parent.read_all_docs
and the schema it outputs
definition user {
}
definition organization {
relation admin: user
relation is_public: user:*
relation member: (user | user:*)
permission read_all_docs = admin
}
definition folder {
relation org_parent: (folder | organization)
relation parent: folder
relation reader: user
permission read = (reader + parent->read)
}
definition document {
relation parent: folder
relation reader: user
permission view = (reader + parent->read_all_docs)
}