Is there a plan to be able to include conditions in the Tuple Explorer so that those can be created from the UI?
Trying to create one from the Python SDK and its just throwing me a 400 error and I am honestly not sure what I am missing here.
Is there a plan to be able to include conditions in the Tuple Explorer so that those can be created from the UI?
Trying to create one from the Python SDK and its just throwing me a 400 error and I am honestly not sure what I am missing here.
Re: Tuple explorer, yes, we’ll do it later this year.
The Python SDK should work fine. Can you paste the code and the error you get?
You can also try the CLI, or using Visual Studio Code to author models + tuples + assertions instead of the Dashboard .
Let me know if that helps
One more bit of feedback. In the tuple management UI, it has “Relation” being the last field but everywhere else relation is always the second field.
How the “user” relates to the “object”. Just feels backwards in the UI and relation should be the second field and not the third. Kind of reads like the “user” “object” is related.
Thanks Stephen! Yes, I feel that pain sometimes too.
That order helps completing the tuple in the UI better. We can give you a list of relations of a type. If we ask for the relation in the second place, we’ll need to list all relations for all types that you can assign a specific user type to, which would be pretty large.
The way to read it is “user X is related to object X as Z” (“user:1 is related to document:1 as a viewer”).
Yah I am using the CLI and the VS Code to do testing and that has been working out well. I am not seeing a way, or at least not a documented way, to test conditions however in the extension.
Updated: Actually I did figure out a way to test conditions.
Is there a way to have a condition to check an IP address, but I want to check against a list of IP CIDR blocks. We have several team member networks and I would like to have a condition to check to see if the IP address is in one of those blocks? Wondering if I can do something like this below where the cidr
is a list.
- user: team_member:internalteammember@example.com
relation: admin
object: api:account_admin
condition:
name: in_company_network
context:
cidr: ["1.2.3.0/21", "2.3.4.0/21"]
check:
- user: team_member:internalteammember@example.com
object: api:account_admin
context:
user_ip: 1.2.3.12
assertions:
create_account: true
In the context of this example, you can change the condition to be
condition in_company_network(user_ip: ipaddress, cidr_list: list<string>) {
cidr_list.exists(cidr, user_ip.in_cidr(cidr))
}
You’d write tuples like
- user: "organization:acme#member"
relation: "ip_based_access_policy"
object: "organization:acme"
condition:
name: in_company_network
context:
cidr_list:
- "192.168.2.0/24"
- "192.168.0.0/24"
Would that work?
Just tested and that works! Thank you.
I have not tested this, but was curious if you can reference conditions that would be in a parent module in sub-models?
Yes, you can do that
Additional follow up on this. If I wanted to centrally control a list of CIDR blocks like this so that people are not having to specify those when writing a tuple to the database, is there any way I can do this?
Have variable where I can control the CIDR blocks and the condition would just reference that variable.
The options you have are:
Does this help?
Ideally I want to be able to store them centrally so that teams are not having to specify these themselves. Plus there is the thought around being able to change the central list of approved CIDR blocks without having to rewrite each tuple that may be referencing those.