is there a typical pattern/approach for ensuring relations that act as a hierarchy of roles (i.e much of the examples in the docs - editor, reader, viewer, etc) don't overlap? e.g a user doesn't get assigned both viewer and editor relations.
realize this can be enforced through application logic or preconditions, but from what I can tell doing so requires duplicating your schema into your code to add some more metadata (i.e these 4 relations are roles, always add a precondition when assigning from this set). I've ended up naming all "role-like" relations prefixed with roles (e.g role_viewer, role_editor). is that pretty much the standard approach?
I guess what I find unsatisfying about this is that there's some implicit metadata about the intent of your schema that you can't really encode into it. I almost would want like a @metadata.relation_type("role") concept or something