CasperT
12/14/2023, 10:22 AMvroldanbet
12/14/2023, 10:57 AMCheckPermission(resource:1#read@subject_a:2)
Then SpiceDB will evaluate your schema as, roughly speaking:
definition resource {
relation rel_a: subject_a
permission read = rel_a
permission write = rel_a
}
If you do CheckPermission(resource:1#read@subject_b:2)
Then the equivalent semantics are:
definition resource {
relation rel_b: subject_b
permission read = rel_b
permission write = nil
}
- on the second example the subject type is the same so both relations will get evaluated:
CheckPermission(resource:1#read@subject:2)
becomes
definition resource {
relation rel_a: subject
relation rel_b: subject
permission read = rel_a + rel_b
permission write = rel_a
}
CasperT
12/14/2023, 11:19 AMCasperT
12/14/2023, 11:34 AMvroldanbet
12/14/2023, 11:49 AMvroldanbet
12/14/2023, 11:50 AMuser
types but other something like a bot
or service_account
or token
CasperT
12/14/2023, 12:15 PMCasperT
12/14/2023, 12:19 PMvroldanbet
12/14/2023, 12:25 PMCasperT
12/14/2023, 12:27 PMvroldanbet
12/14/2023, 12:28 PMvroldanbet
12/14/2023, 12:29 PMvroldanbet
12/14/2023, 12:29 PMvroldanbet
12/14/2023, 12:29 PMvroldanbet
12/14/2023, 12:30 PMCasperT
12/14/2023, 12:32 PMvroldanbet
12/14/2023, 12:34 PMCasperT
12/14/2023, 12:56 PMvroldanbet
12/14/2023, 6:14 PMdefinition user{}
definition platform {
relation internal: user
relation external: user
permission internal = internal
permission all = internal + external
}
definition doc {
relation visibility_internal: platform#internal
relation visibility_shared: platform#all
permission read = visibility_shared
permission write = visibility_internal
}
If instead of top-level users you have something like an organization
, then you can replace platform
with organization
and it should be mostly the same
I couldn't quite infer the semantics of "internal" and "external" in your example, as it does not seem to make much a difference.CasperT
12/15/2023, 1:42 PMvroldanbet
12/15/2023, 2:34 PM