diff --git a/docker/initial-data.json b/docker/initial-data.json index 0882cc2c2..493c6b6b3 100644 --- a/docker/initial-data.json +++ b/docker/initial-data.json @@ -2,12 +2,18 @@ "organisation": [ { "id": 1, + "name": "OpenSlides", + "description": "The digital motion and assembly system", "legal_notice": "OpenSlides is a free web based presentation and assembly system for visualizing and controlling agenda, motions and elections of an assembly.", - "openslides_theme": "openslides-theme", + "privacy_policy": "", + "login_text": "Welcome to OpenSlides. Please login.", + "theme": "openslides-theme", + "custom_translations": "", + "reset_password_verbose_errors": false, + + "enable_electronic_voting": true, "committee_ids": [1], - "role_ids": [1], - "superadmin_role_id": 1, "resource_ids": [] }], "user": [ @@ -18,51 +24,45 @@ "first_name": "", "last_name": "Administrator", "is_active": true, - "is_committee": false, + "is_physical_person": true, "password": "1422e767c5e08bb7196844025a0f98e1x61Ey612Kl2gpFL56FT9weDnpSo4AV8j8+qx2AuTHdRyY036xxzTTrw10Wq3+4qQyB+XURPWx1ONxp3Y3pB37A==", "default_password": "admin", - "about_me": "", "gender": "", - "comment": "", - "number": "", - "structure_level": "", "email": "", + "default_number": "", + "default_structure_level": "", + "default_vote_weight": "1.000000", "last_email_send": null, - "vote_weight": "1.000000", - - "role_id": 1, + "is_demo_user": false, + "organisation_management_level": "superadmin", "is_present_in_meeting_ids": [], "meeting_id": null, "guest_meeting_ids": [], "committee_as_member_ids": [], "committee_as_manager_ids": [], - "projection_ids": [], - "current_projector_ids": [], + "comment_$": [], + "number_$": [], + "structure_level_$": [], + "about_me_$": [], + "vote_weight_$": [], "group_$_ids": ["1"], - "group_1_ids": [2], + "group_$1_ids": [2], "speaker_$_ids": [], "personal_note_$_ids": [], "supported_motion_$_ids": [], "submitted_motion_$_ids": [], - "motion_poll_voted_$_ids": [], - "motion_vote_$_ids": [], + "poll_voted_$_ids": [], + "option_$_ids": [], + "vote_$_ids": [], + "vote_delegated_vote_$_ids": [], "assignment_candidate_$_ids": [], - "assignment_poll_voted_$_ids": [], - "assignment_option_$_ids": [], - "assignment_vote_$_ids": [] - }], -"role": [ - { - "id": 1, - "name": "Superadmin role", - "permissions": [], - - "organisation_id": 1, - "superadmin_role_for_organisation_id": 1, - "user_ids": [1] + "projection_$_ids": [], + "current_projector_$_ids": [], + "vote_delegated_$_to_id": [], + "vote_delegations_$_from_ids": [] }], "resource": [], "committee": [ @@ -83,23 +83,30 @@ "meeting": [ { "id": 1, - "url_name": "os3_test", - "template_for_committee_id": null, - "enable_anonymous": false, + "welcome_title": "Welcome to OpenSlides", + "welcome_text": "[Space for your welcome text.]", "name": "OpenSlides - Die Veranstaltung (Teil II)", "description": "Presentation and assembly system", "location": "", "start_time": 0, "end_time": 0, - "welcome_title": "Welcome to OpenSlides", - "welcome_text": "[Space for your welcome text.]", - "custom_translations": [], + + "jitsi_domain": "", + "jitsi_room_name": "", + "jitsi_room_password": "", + + "url_name": "openslides_1", + "template_for_committee_id": null, + "enable_anonymous": false, "conference_show": false, "conference_auto_connect": false, "conference_los_restriction": false, "conference_stream_url": "", + "conference_open_microphone": true, + "conference_open_video": true, + "conference_auto_connect_next_speakers": true, "projector_default_countdown_time": 60, "projector_countdown_warning_time": 0, @@ -124,9 +131,11 @@ "list_of_speakers_show_amount_of_speakers_on_slide": true, "list_of_speakers_present_users_only": false, "list_of_speakers_show_first_contribution": false, + "list_of_speakers_enable_point_of_order_speakers": true, "motions_default_workflow_id": 1, - "motions_statute_amendment_workflow_id": 1, + "motions_default_amendment_workflow_id": 1, + "motions_default_statute_amendment_workflow_id": 1, "motions_preamble": "The assembly may decide:", "motions_default_line_numbering": "none", "motions_line_length": 90, @@ -136,7 +145,7 @@ "motions_enable_sidebox_on_projector": false, "motions_enable_recommendation_on_projector": true, "motions_show_referring_motions": true, - "motions_show_sequential_numbers": true, + "motions_show_sequential_number": true, "motions_recommendations_by": "", "motions_statute_recommendations_by": "", "motions_recommendation_text_mode": "original", @@ -152,7 +161,6 @@ "motions_amendments_text_mode": "freestyle", "motions_amendments_multiple_paragraphs": true, "motions_supporters_min_amount": 1, - "motions_supporters_autoremove": false, "motions_export_title": "Motions", "motions_export_preamble": "", "motions_export_submitter_recommendation": false, @@ -191,6 +199,7 @@ "assignment_poll_default_group_ids": [3, 5], "projector_ids": [1], + "projection_ids": [], "projectiondefault_ids": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "projector_message_ids": [], "projector_countdown_ids": [], @@ -206,9 +215,16 @@ "motion_block_ids": [], "motion_workflow_ids": [1], "motion_statute_paragraph_ids": [], - "motion_poll_ids": [], + "motion_comment_ids": [], + "motion_submitter_ids": [], + "motion_change_recommendation_ids": [], + "motion_state_ids": [], + "poll_ids": [], + "option_ids": [], + "vote_ids": [], "assignment_ids": [], - "assignment_poll_ids": [], + "assignment_candidate_ids": [], + "personal_note_ids": [], "logo_$_id": [], "font_$_id": [], @@ -216,9 +232,9 @@ "committee_id": 1, "default_meeting_for_committee_id": 1, "present_user_ids": [], - "temorary_user_ids": [], + "temporary_user_ids": [], "guest_ids": [], - "user_ids": [], + "user_ids": [1], "reference_projector_id": 2, "default_group_id": 1, @@ -228,8 +244,6 @@ { "id": 1, "name": "Default", - "admin_group_for_meeting_id": null, - "default_group_for_meeting_id": 1, "permissions": [ "agenda_item.can_see", "agenda_item.can_see_internals", @@ -240,12 +254,15 @@ "motion.can_see", "user.can_see" ], + "user_ids": [], + "default_group_for_meeting_id": 1, + "admin_group_for_meeting_id": null, "mediafile_access_group_ids": [], + "mediafile_inherited_access_group_ids": [], "read_comment_section_ids": [], "write_comment_section_ids": [], - "motion_poll_ids": [], - "assignment_poll_ids": [], + "poll_ids": [], "used_as_motion_poll_default_id": null, "used_as_assignment_poll_default_id": null, "meeting_id": 1 @@ -253,25 +270,23 @@ { "id": 2, "name": "Admin", - "admin_group_for_meeting_id": 1, - "default_group_for_meeting_id": null, "permissions": [], - "user_ids": [], + + "user_ids": [1], + "default_group_for_meeting_id": null, + "admin_group_for_meeting_id": 1, "mediafile_access_group_ids": [], "mediafile_inherited_access_group_ids": [], "read_comment_section_ids": [], "write_comment_section_ids": [], - "motion_poll_ids": [], - "assignment_poll_ids": [], - "used_as_motion_poll_default_id": 1, + "poll_ids": [], + "used_as_motion_poll_default_id": null, "used_as_assignment_poll_default_id": null, "meeting_id": 1 }, { "id": 3, "name": "Staff", - "admin_group_for_meeting_id": null, - "default_group_for_meeting_id": null, "permissions": [ "agenda_item.can_manage", "agenda_item.can_see", @@ -296,21 +311,20 @@ ], "user_ids": [], + "default_group_for_meeting_id": null, + "admin_group_for_meeting_id": null, "mediafile_access_group_ids": [], "mediafile_inherited_access_group_ids": [], "read_comment_section_ids": [], "write_comment_section_ids": [], - "motion_poll_ids": [], - "assignment_poll_ids": [], - "used_as_motion_poll_default_id": 1, - "used_as_assignment_poll_default_id": 1, + "poll_ids": [], + "used_as_motion_poll_default_id": null, + "used_as_assignment_poll_default_id": null, "meeting_id": 1 }, { "id": 5, "name": "Committees", - "admin_group_for_meeting_id": null, - "default_group_for_meeting_id": null, "permissions": [ "agenda_item.can_see", "agenda_item.can_see_internals", @@ -325,20 +339,20 @@ ], "user_ids": [], + "default_group_for_meeting_id": null, + "admin_group_for_meeting_id": null, "mediafile_access_group_ids": [], + "mediafile_inherited_access_group_ids": [], "read_comment_section_ids": [], "write_comment_section_ids": [], - "motion_poll_ids": [], - "assignment_poll_ids": [], + "poll_ids": [], "used_as_motion_poll_default_id": null, - "used_as_assignment_poll_default_id": 1, + "used_as_assignment_poll_default_id": null, "meeting_id": 1 }, { "id": 6, "name": "Delegates", - "admin_group_for_meeting_id": null, - "default_group_for_meeting_id": null, "permissions": [ "agenda_item.can_see", "agenda_item.can_see_internals", @@ -357,13 +371,15 @@ ], "user_ids": [], + "default_group_for_meeting_id": null, + "admin_group_for_meeting_id": null, "mediafile_access_group_ids": [], + "mediafile_inherited_access_group_ids": [], "read_comment_section_ids": [], "write_comment_section_ids": [], - "motion_poll_ids": [], - "assignment_poll_ids": [], - "used_as_motion_poll_default_id": null, - "used_as_assignment_poll_default_id": null, + "poll_ids": [], + "used_as_motion_poll_default_id": 1, + "used_as_assignment_poll_default_id": 1, "meeting_id": 1 }], "personal_note": [], @@ -399,7 +415,8 @@ "motion_ids": [], "motion_recommendation_ids": [], "workflow_id": 1, - "first_state_of_workflow_id": 1 + "first_state_of_workflow_id": 1, + "meeting_id": 1 }, { "id": 2, @@ -420,7 +437,8 @@ "motion_ids": [], "motion_recommendation_ids": [], "workflow_id": 1, - "first_state_of_workflow_id": null + "first_state_of_workflow_id": null, + "meeting_id": 1 }, { "id": 3, @@ -441,7 +459,8 @@ "motion_ids": [], "motion_recommendation_ids": [], "workflow_id": 1, - "first_state_of_workflow_id": null + "first_state_of_workflow_id": null, + "meeting_id": 1 }, { "id": 4, @@ -462,7 +481,8 @@ "motion_ids": [], "motion_recommendation_ids": [], "workflow_id": 1, - "first_state_of_workflow_id": null + "first_state_of_workflow_id": null, + "meeting_id": 1 } ], "motion_workflow": [ @@ -473,18 +493,16 @@ "state_ids": [1, 2, 3, 4], "first_state_id": 1, "default_workflow_meeting_id": 1, - "default_statute_amendments_meeting_id": 1, + "default_amendment_workflow_meeting_id": 1, + "default_statute_amendment_workflow_meeting_id": 1, "meeting_id": 1 }], "motion_statute_paragraph": [], -"motion_poll": [], -"motion_option": [], -"motion_vote": [], +"poll": [], +"option": [], +"vote": [], "assignment": [], "assignment_candidate": [], -"assignment_poll": [], -"assignment_option": [], -"assignment_vote": [], "mediafile": [], "projector": [ { diff --git a/docs/example-data.json b/docs/example-data.json index 8891aa020..5d4725646 100644 --- a/docs/example-data.json +++ b/docs/example-data.json @@ -4,13 +4,11 @@ "id": 1, "legal_notice": "OpenSlides is a free web based presentation and assembly system for visualizing and controlling agenda, motions and elections of an assembly.", "privacy_policy": "", - "login_info_text": "Guten Morgen!", - "openslides_theme": "openslides-theme", + "login_text": "Guten Morgen!", + "theme": "openslides-theme", "custom_translations": [], "committee_ids": [1], - "role_ids": [1], - "superadmin_role_id": 1, "resource_ids": [1] }], "user": [ @@ -24,16 +22,14 @@ "is_physical_person": true, "password": "316af7b2ddc20ead599c38541fbe87e9a9e4e960d4017d6e59de188b41b2758flD5BVZAZ8jLy4nYW9iomHcnkXWkfk3PgBjeiTSxjGG7+fBjMBxsaS1vIiAMxYh+K38l0gDW4wcP+i8tgoc4UBg==", "default_password": "admin", - "about_me": "", "gender": "", - "comment": "", - "number": "", - "structure_level": "", "email": "", + "default_number": "", + "default_structure_level": "", + "default_vote_weight": "1.000000", "last_email_send": null, - "vote_weight": "1.000000", - "role_id": 1, + "organisation_management_level": "superadmin", "is_present_in_meeting_ids": [1], "meeting_id": null, @@ -41,6 +37,17 @@ "committee_as_member_ids": [], "committee_as_manager_ids": [], + "comment_$": ["1"], + "comment_$1": "Test comment", + "number_$": ["1"], + "number_$1": "12345-67890", + "structure_level_$": ["1"], + "structure_level_$1": "Test structure level", + "about_me_$": ["1"], + "about_me_$1": "What I want to say about me.", + "vote_weight_$": ["1"], + "vote_weight_$1": "1.000000", + "group_$_ids": ["1"], "group_$1_ids": [2], "speaker_$_ids": ["1"], @@ -75,16 +82,14 @@ "is_physical_person": true, "password": "316af7b2ddc20ead599c38541fbe87e9a9e4e960d4017d6e59de188b41b2758fDB3tv5HcCtPRREt7bPGqerTf1AbmoKXt/fVFkLY4znDRh2Yy0m3ZjXD0nHI8oa6KrGlHH/cvysfvf8i2fWIzmw==", "default_password": "a", - "about_me": "", "gender": "", - "comment": "", - "number": "", - "structure_level": "", "email": "", + "default_number": "", + "default_structure_level": "", + "default_vote_weight": "1.000000", "last_email_send": null, - "vote_weight": "1.000000", - "role_id": null, + "organisation_management_level": "", "is_present_in_meeting_ids": [], "meeting_id": null, @@ -92,6 +97,17 @@ "committee_as_member_ids": [], "committee_as_manager_ids": [], + "comment_$": ["1"], + "comment_$1": "Test comment a", + "number_$": ["1"], + "number_$1": "12345-67891", + "structure_level_$": ["1"], + "structure_level_$1": "Test structure level a", + "about_me_$": ["1"], + "about_me_$1": "What I want to say about me with a", + "vote_weight_$": ["1"], + "vote_weight_$1": "1.000000", + "group_$_ids": ["1"], "group_$1_ids": [6], "speaker_$_ids": ["1"], @@ -121,16 +137,14 @@ "is_physical_person": true, "password": "316af7b2ddc20ead599c38541fbe87e9a9e4e960d4017d6e59de188b41b2758fIxDxvpkn6dDLRxT9DxJhZ/f04AL2oK2beICRFobSw53CI93U+dfN+w+NaL7BvrcR4JWuMj9NkH4dVjnnI0YTkg==", "default_password": "jKwSLGCk", - "about_me": "", "gender": "", - "comment": "", - "number": "", - "structure_level": "", "email": "", + "default_number": "", + "default_structure_level": "", + "default_vote_weight": "1.000000", "last_email_send": null, - "vote_weight": "1.000000", - "role_id": null, + "organisation_management_level": "", "is_present_in_meeting_ids": [], "meeting_id": null, @@ -138,6 +152,17 @@ "committee_as_member_ids": [], "committee_as_manager_ids": [], + "comment_$": ["1"], + "comment_$1": "Test comment b as guest", + "number_$": ["1"], + "number_$1": "12345-67892", + "structure_level_$": ["1"], + "structure_level_$1": "Test structure level b", + "about_me_$": ["1"], + "about_me_$1": "What I want to say about me. B", + "vote_weight_$": ["1"], + "vote_weight_$1": "1.000000", + "group_$_ids": [], "speaker_$_ids": ["1"], "speaker_$1_ids": [4, 8, 9], @@ -157,16 +182,6 @@ "vote_delegated_$_to_id": [], "vote_delegations_$_from_ids": [] }], -"role": [ - { - "id": 1, - "name": "Superadmin role", - "permissions": [], - - "organisation_id": 1, - "superadmin_role_for_organisation_id": 1, - "user_ids": [1] - }], "resource": [ { "id": 1, @@ -205,7 +220,6 @@ "end_time": 0, "welcome_title": "Welcome to OpenSlides", "welcome_text": "[Space for your welcome text.]", - "custom_translations": [], "conference_show": false, "conference_auto_connect": false, @@ -253,7 +267,7 @@ "motions_enable_sidebox_on_projector": true, "motions_enable_recommendation_on_projector": true, "motions_show_referring_motions": true, - "motions_show_sequential_numbers": true, + "motions_show_sequential_number": true, "motions_recommendations_by": "ABK", "motions_statute_recommendations_by": "Statute ABK", "motions_recommendation_text_mode": "original", @@ -1296,8 +1310,7 @@ "submitter_ids": [1], "supporter_ids": [], "poll_ids": [1, 2], - "option_$_ids": ["1"], - "option_$1_ids": [1, 2], + "option_ids": [1, 3], "change_recommendation_ids": [], "statute_paragraph_id": null, "comment_ids": [1], @@ -1342,7 +1355,7 @@ "submitter_ids": [2], "supporter_ids": [], "poll_ids": [], - "option_$_ids": [], + "option_ids": [], "change_recommendation_ids": [], "statute_paragraph_id": null, "comment_ids": [], @@ -1387,7 +1400,7 @@ "submitter_ids": [3], "supporter_ids": [3], "poll_ids": [], - "option_$_ids": [], + "option_ids": [], "change_recommendation_ids": [5], "statute_paragraph_id": null, "comment_ids": [], @@ -1432,7 +1445,7 @@ "submitter_ids": [4], "supporter_ids": [], "poll_ids": [], - "option_$_ids": [], + "option_ids": [], "change_recommendation_ids": [4], "statute_paragraph_id": null, "comments": [], diff --git a/docs/models.yml b/docs/models.yml index 617346702..ff770df6c 100644 --- a/docs/models.yml +++ b/docs/models.yml @@ -81,12 +81,6 @@ organisation: committee_ids: type: relation-list to: committee/organisation_id - role_ids: - type: relation-list - to: role/organisation_id - superadmin_role_id: - type: relation - to: role/superadmin_role_for_organisation_id resource_ids: type: relation-list to: resource/organisation_id @@ -103,28 +97,24 @@ user: default: true password: string default_password: string - about_me: HTMLStrict gender: string - comment: HTMLStrict - number: string - structure_level: string email: string + default_number: string + default_structure_level: string + default_vote_weight: decimal(6) last_email_send: string - vote_weight: decimal(6) is_demo_user: type: boolean read_only: true - role_id: - type: relation - to: role/user_ids # Attention: prevent impelenting a "default-role" or let a - # user create such a role! This would cause the user_ids-array for this - # role to explode in size. If a user has no role, it should be handles as - # the user has no permission in the organisation and is a "normal" delegate - # there. Just a few users (expected <100) should even get a role and all - # other don't. - - # Meeting and committee + # Organisation, meeting and committee + organisation_management_level: + type: string + description: Hierarchical permission level for the whole organisation. + enum: + - superadmin + - can_manage_organisation + - can_manage_users is_present_in_meeting_ids: type: relation-list to: meeting/present_user_ids @@ -141,6 +131,24 @@ user: type: relation-list to: committee/manager_ids + # Meeting specific personal data + # Replacement is te meeting id but it is not a structured relation. + comment_$: + type: template + fields: HTMLStrict + number_$: + type: template + fields: string + structure_level_$: + type: template + fields: string + about_me_$: + type: template + fields: HTMLStrict + vote_weight_$: + type: template + fields: decimal(6) + # All foreign keys are meeting-specific: # - Keys are smaller (Space is in O(n^2) for n keys # in the relation), so this saves storagespace @@ -233,21 +241,6 @@ user: type: relation-list to: user/vote_delegated_$_to_id -role: - id: number - name: string - permissions: string[] - - organisation_id: - type: relation - to: organisation/role_ids - superadmin_role_for_organisation_id: - type: relation - to: organisation/superadmin_role_id - user_ids: - type: relation-list - to: user/role_id - # New: Resource # Resources are organsation wide "mediafiles", like logos for the organisatio or # organisation-wide fonts. Therefore, no permission checks are done and the user @@ -641,7 +634,7 @@ meeting: users_email_body: string # Assignments - assignemnts_export_title: + assignments_export_title: type: string default: Elections assignments_export_preamble: diff --git a/docs/modelsvalidator/check_json.py b/docs/modelsvalidator/check_json.py new file mode 100644 index 000000000..238d2702b --- /dev/null +++ b/docs/modelsvalidator/check_json.py @@ -0,0 +1,100 @@ +# This script requires fastjsonschema and pyyaml to be installed e. g. via pip. + +import json +import sys +from typing import Any, Dict, Iterable + +import fastjsonschema # type:ignore +import yaml + +MODELS_YML_PATH = "../../docs/models.yml" + +CHECKED_FILES = [ + "../../docker/initial-data.json", + "../../docs/example-data.json", +] + +SCHEMA = fastjsonschema.compile( + { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Schema for initial and example data.", + "type": "object", + "patternProperties": { + "^[a-z_]+$": { + "type": "array", + "items": { + "type": "object", + "properties": {"id": {"type": "number"}}, + "required": ["id"], + }, + } + }, + "additionalProperties": False, + } +) + + +class CheckException(Exception): + pass + + +def run_check(data: Dict) -> None: + try: + SCHEMA(data) + except fastjsonschema.exceptions.JsonSchemaException as e: + raise CheckException(f"JSON does not match schema: {str(e)}") + check_collections(data.keys()) + for collection, elements in data.items(): + for element in elements: + check_instance(collection, element) + + +def get_models() -> Dict[str, Any]: + with open(MODELS_YML_PATH, "rb") as x: + models_yml = x.read() + models_yml = models_yml.replace(" yes:".encode(), ' "yes":'.encode()) + models_yml = models_yml.replace(" no:".encode(), ' "no":'.encode()) + return yaml.safe_load(models_yml) + + +def check_collections(collections: Iterable[str]) -> None: + c1 = set(collections) + c2 = set(get_models().keys()) + if c1 != c2: + err = "Collections in JSON file do not match with models.yml." + if c2 - c1: + err += f" Missing collections: {', '.join(c2-c1)}." + if c1 - c2: + err += f" Invalid collections: {', '.join(c1-c2)}." + raise CheckException(err) + + +def check_instance(name: str, instance: Dict[str, Any]) -> None: + collection = get_models()[name] + for field_name in instance.keys(): + if "$" in field_name and not ("$_" in field_name or field_name[-1] == "$"): + # Structured field. + # TODO: Check this. + continue + if field_name not in collection.keys(): + raise CheckException(f"Bad field in {name}: {field_name}") + + +def main() -> int: + failed = False + for f in CHECKED_FILES: + with open(f) as data: + try: + run_check(json.load(data)) + except CheckException as e: + print(f"Check for {f} failed:", e) + failed = True + else: + print(f"Check for {f} successful.") + if failed: + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/openslides-auth-service b/openslides-auth-service index 8caa333f9..667b32e23 160000 --- a/openslides-auth-service +++ b/openslides-auth-service @@ -1 +1 @@ -Subproject commit 8caa333f9139e81d36ce775e25d3555ed14c9f15 +Subproject commit 667b32e2306ecfcfe3273c92c1e46c2f11055c06 diff --git a/openslides-client b/openslides-client index 1ac2192ac..193149e9b 160000 --- a/openslides-client +++ b/openslides-client @@ -1 +1 @@ -Subproject commit 1ac2192ac3bdfe18e3468e00197bfb067b69b112 +Subproject commit 193149e9b6e50862f17ea278ba3b660eb1826589 diff --git a/openslides-media-service b/openslides-media-service index 6db3ecb09..cdf1b72b2 160000 --- a/openslides-media-service +++ b/openslides-media-service @@ -1 +1 @@ -Subproject commit 6db3ecb09ecc4b49b20bb7fb6b24a057678ea27f +Subproject commit cdf1b72b2252d1179d8e4a548f23b8df31e33c4c diff --git a/openslides-permission-service b/openslides-permission-service index 532f86b21..a7c93cf9d 160000 --- a/openslides-permission-service +++ b/openslides-permission-service @@ -1 +1 @@ -Subproject commit 532f86b21c392bcdc9cab6d24351f9905c739214 +Subproject commit a7c93cf9db1f29de57c07b05a3fefd63b0900ec7