@@ -585,3 +585,93 @@ def generate_v4(public_project_ids: Iterable[str]) -> AuthzSchemaMigration:
585585 up = [WriteSchemaRequest (schema = _v6 )],
586586 down = [WriteSchemaRequest (schema = _v5 )],
587587)
588+
589+ _v7 = """\
590+ definition user {}
591+
592+ definition group {
593+ relation group_platform: platform
594+ relation owner: user
595+ relation editor: user
596+ relation viewer: user
597+ relation public_viewer: user:* | anonymous_user:*
598+ permission read = public_viewer + read_children
599+ permission read_children = viewer + write
600+ permission write = editor + delete
601+ permission change_membership = delete
602+ permission delete = owner + group_platform->is_admin
603+ permission non_public_read = owner + editor + viewer - public_viewer
604+ permission exclusive_owner = owner
605+ permission exclusive_editor = editor
606+ permission exclusive_member = viewer + editor + owner
607+ permission direct_member = owner + editor + viewer
608+ }
609+
610+ definition user_namespace {
611+ relation user_namespace_platform: platform
612+ relation owner: user
613+ relation public_viewer: user:* | anonymous_user:*
614+ permission read = public_viewer + read_children
615+ permission read_children = delete
616+ permission write = delete
617+ permission delete = owner + user_namespace_platform->is_admin
618+ permission non_public_read = owner - public_viewer
619+ permission exclusive_owner = owner
620+ permission exclusive_member = owner
621+ permission direct_member = owner
622+ }
623+
624+ definition anonymous_user {}
625+
626+ definition platform {
627+ relation admin: user
628+ permission is_admin = admin
629+ }
630+
631+ definition project {
632+ relation project_platform: platform
633+ relation project_namespace: user_namespace | group
634+ relation owner: user
635+ relation editor: user
636+ relation viewer: user
637+ relation public_viewer: user:* | anonymous_user:*
638+ permission read = public_viewer + read_children
639+ permission read_children = viewer + write + project_namespace->read_children
640+ permission write = editor + delete + project_namespace->write
641+ permission change_membership = delete
642+ permission delete = owner + project_platform->is_admin + project_namespace->delete
643+ permission non_public_read = owner + editor + viewer + project_namespace->read_children - public_viewer
644+ permission exclusive_owner = owner + project_namespace->exclusive_owner
645+ permission exclusive_editor = editor + project_namespace->exclusive_editor
646+ permission exclusive_member = owner + editor + viewer + project_namespace->exclusive_member
647+ permission direct_member = owner + editor + viewer
648+ }
649+
650+ definition data_connector {
651+ relation data_connector_platform: platform
652+ relation data_connector_namespace: user_namespace | group | project
653+ relation linked_to: project
654+ relation owner: user
655+ relation editor: user
656+ relation viewer: user
657+ relation public_viewer: user:* | anonymous_user:*
658+ permission read = public_viewer + viewer + write + data_connector_namespace->read_children
659+ permission write = editor + delete + data_connector_namespace->write
660+ permission change_membership = delete
661+ permission delete = owner + data_connector_platform->is_admin + data_connector_namespace->delete
662+ permission non_public_read = owner + editor + viewer + data_connector_namespace->read_children - public_viewer
663+ permission exclusive_owner = owner + data_connector_namespace->exclusive_owner
664+ permission exclusive_editor = editor + data_connector_namespace->exclusive_editor
665+ permission exclusive_member = owner + editor + viewer + data_connector_namespace->exclusive_member
666+ permission direct_member = owner + editor + viewer
667+ }"""
668+ """This adds three permissions starting with `exclusive_` that are identifying the path of a role.
669+
670+ They are used for reverse lookups (LookupResources) to determine which
671+ objects a specific user is an owner, editor or member.
672+ """
673+
674+ v7 = AuthzSchemaMigration (
675+ up = [WriteSchemaRequest (schema = _v7 )],
676+ down = [WriteSchemaRequest (schema = _v6 )],
677+ )
0 commit comments