@@ -981,3 +981,149 @@ def generate_v4(public_project_ids: Iterable[str]) -> AuthzSchemaMigration:
981981 WriteSchemaRequest (schema = _v9 ),
982982 ],
983983)
984+
985+ _v11 = """\
986+ definition user {}
987+
988+ definition group {
989+ relation group_platform: platform
990+ relation owner: user
991+ relation editor: user
992+ relation viewer: user
993+ relation public_viewer: user:* | anonymous_user:*
994+ permission read = public_viewer + read_children
995+ permission read_children = viewer + write
996+ permission write = editor + delete
997+ permission change_membership = delete
998+ permission delete = owner + group_platform->is_admin
999+ permission non_public_read = owner + editor + viewer - public_viewer
1000+ permission exclusive_owner = owner
1001+ permission exclusive_editor = editor
1002+ permission exclusive_member = viewer + editor + owner
1003+ permission direct_member = owner + editor + viewer
1004+ }
1005+
1006+ definition user_namespace {
1007+ relation user_namespace_platform: platform
1008+ relation owner: user
1009+ relation public_viewer: user:* | anonymous_user:*
1010+ permission read = public_viewer + read_children
1011+ permission read_children = delete
1012+ permission write = delete
1013+ permission delete = owner + user_namespace_platform->is_admin
1014+ permission non_public_read = owner - public_viewer
1015+ permission exclusive_owner = owner
1016+ permission exclusive_member = owner
1017+ permission direct_member = owner
1018+ }
1019+
1020+ definition anonymous_user {}
1021+
1022+ definition platform {
1023+ relation admin: user
1024+ relation project_creator: user:*
1025+ relation group_creator: user:*
1026+ permission is_admin = admin
1027+ permission create_projects = is_admin + project_creator
1028+ permission create_groups = is_admin + group_creator
1029+ }
1030+
1031+ definition project {
1032+ relation project_platform: platform
1033+ relation project_namespace: user_namespace | group
1034+ relation owner: user
1035+ relation editor: user
1036+ relation viewer: user
1037+ relation public_viewer: user:* | anonymous_user:*
1038+ permission read = public_viewer + read_children
1039+ permission read_children = viewer + write + project_namespace->read_children
1040+ permission write = editor + delete
1041+ permission change_membership = delete
1042+ permission delete = owner + project_platform->is_admin + project_namespace->delete
1043+ permission non_public_read = owner + editor + viewer + project_namespace->read_children - public_viewer
1044+ permission exclusive_owner = owner + project_namespace->exclusive_owner
1045+ permission exclusive_editor = editor
1046+ permission exclusive_member = owner + editor + viewer + project_namespace->exclusive_member
1047+ permission direct_member = owner + editor + viewer
1048+ }
1049+
1050+ definition data_connector {
1051+ relation data_connector_platform: platform
1052+ relation data_connector_namespace: user_namespace | group | project
1053+ relation linked_to: project
1054+ relation owner: user
1055+ relation editor: user
1056+ relation viewer: user
1057+ relation public_viewer: user:* | anonymous_user:*
1058+ permission read = public_viewer + viewer + write + data_connector_namespace->read_children
1059+ permission write = editor + delete
1060+ permission change_membership = delete
1061+ permission delete = owner + data_connector_platform->is_admin + data_connector_namespace->delete
1062+ permission non_public_read = owner + editor + viewer + data_connector_namespace->read_children - public_viewer
1063+ permission exclusive_owner = owner + data_connector_namespace->exclusive_owner
1064+ permission exclusive_editor = editor
1065+ permission exclusive_member = owner + editor + viewer + data_connector_namespace->exclusive_member
1066+ permission direct_member = owner + editor + viewer
1067+ }
1068+
1069+ definition resource_pool {
1070+ relation resource_pool_platform: platform
1071+ relation viewer: user
1072+ relation group_viewer: group
1073+ relation project_viewer: project
1074+ relation prohibited: user
1075+ relation public_viewer: user:* | anonymous_user:*
1076+ permission read = ( \
1077+ viewer \
1078+ + group_viewer->direct_member\
1079+ + project_viewer->direct_member \
1080+ + public_viewer \
1081+ - prohibited \
1082+ ) \
1083+ + resource_pool_platform->is_admin
1084+ permission write = resource_pool_platform->is_admin
1085+ }"""
1086+ """Adds the resource_pool definition for Authzed authorization."""
1087+
1088+ v11 = AuthzSchemaMigration (
1089+ up = [
1090+ WriteSchemaRequest (schema = _v11 ),
1091+ WriteRelationshipsRequest (
1092+ updates = [
1093+ RelationshipUpdate (
1094+ operation = RelationshipUpdate .OPERATION_TOUCH ,
1095+ relationship = Relationship (
1096+ resource = _AuthzConverter .platform (),
1097+ relation = "project_creator" ,
1098+ subject = SubjectReference (object = _AuthzConverter .all_users ()),
1099+ ),
1100+ ),
1101+ RelationshipUpdate (
1102+ operation = RelationshipUpdate .OPERATION_TOUCH ,
1103+ relationship = Relationship (
1104+ resource = _AuthzConverter .platform (),
1105+ relation = "group_creator" ,
1106+ subject = SubjectReference (object = _AuthzConverter .all_users ()),
1107+ ),
1108+ ),
1109+ ]
1110+ ),
1111+ ],
1112+ down = [
1113+ DeleteRelationshipsRequest (
1114+ relationship_filter = RelationshipFilter (
1115+ resource_type = _AuthzConverter .platform ().object_type ,
1116+ optional_resource_id = _AuthzConverter .platform ().object_id ,
1117+ optional_relation = "project_creator" ,
1118+ ),
1119+ ),
1120+ DeleteRelationshipsRequest (
1121+ relationship_filter = RelationshipFilter (
1122+ resource_type = _AuthzConverter .platform ().object_type ,
1123+ optional_resource_id = _AuthzConverter .platform ().object_id ,
1124+ optional_relation = "group_creator" ,
1125+ ),
1126+ ),
1127+ WriteSchemaRequest (schema = _v10 ),
1128+ ],
1129+ )
0 commit comments