I'm reading this blog post about roles
https://authzed.com/blog/user-defined-roles and one thing I'm a bit surprised about is that the default roles have to be created and attached manually for every single project. The roles are an important part of how the permissions system will work, but in this solution, they're external to the schema and not something that can be taken for granted. My gut feeling looking at this is that it is pushing important details about the functionality of the system into code that can fail to uphold it. Sure, we can push all the relationships for this in one request so it's a not an issue of atomicity, but it's a lot less assured that something as declarative or contractual as the schema itself is.
I guess my question is, is this a recognized pattern and are there any best practices I should keep in mind? Sorry for the ramble lol