Beluga
06/06/2024, 5:43 AMdefinition user {}
definition role {
relation assignee: user
permission edit = assignee
}
definition module {
relation editor: role
permission edit = editor->edit
}
with a use case of multiple roles assigned to specific module:"payments"
each role represent different tenant
user-1 -> role-1 -> module:payments
user-x -> role-x -> module:payments
Testing this model found that as the number of roles grows the query getting really slow
for example data set with 2000 roles
~ zed permission check module:payments edit user:user-999 --explain
8:17AM INF debugging requested on check
true
✓ module:payments edit (250.510208ms)
├── ⨉ role:role-0,role-1,role-10,role-100,role-1000,role-1001,role-1002,role-1003,role-1004,role-1005,role-1006,role-1007,role-1008,role-1009,role-101,role-1010,role-1011,role-1012,role-1013,role-1014,role-1015,role-
...
962,role-963,role-964,role-965,role-966,role-967,role-968,role-969,role-97,role-970,role-971,role-972,role-973,role-974,role-975,role-976,role-977,role-978,role-979,role-98,role-980,role-981,role-982,role-983,role-984,role-985,role-986,role-987,role-988,role-989,role-99,role-990,role-991,role-992,role-993,role-994,role-995,role-996,role-997,role-998,role-999 assignee (229.226876ms)
└── user:user-999
Is there a better modeling I can do to resolve this issue ?
Or maybe this is not the right solution for the described model ?
Thanks!vroldanbet
06/06/2024, 6:45 AMBeluga
06/06/2024, 8:53 AMvroldanbet
06/06/2024, 8:57 AMJoey
06/06/2024, 2:41 PMBeluga
06/18/2024, 8:10 AMJoey
06/18/2024, 2:39 PM