Skip to content

Commit b584db5

Browse files
committed
permission [nfc]: Move some permissions code out to new file
1 parent 391b56a commit b584db5

File tree

5 files changed

+293
-280
lines changed

5 files changed

+293
-280
lines changed

lib/api/model/initial_snapshot.dart

Lines changed: 0 additions & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -424,248 +424,3 @@ class UnreadHuddleSnapshot {
424424

425425
Map<String, dynamic> toJson() => _$UnreadHuddleSnapshotToJson(this);
426426
}
427-
428-
/// Metadata about how to interpret the various group-based permission settings.
429-
///
430-
/// This is the type that [InitialSnapshot.serverSupportedPermissionSettings]
431-
/// would have, according to the API as it exists as of 2025-08;
432-
/// but that API is documented as unstable and subject to change.
433-
///
434-
/// For a useful value of this type, see [SupportedPermissionSettings.fixture].
435-
///
436-
/// For docs, search for "d_perm" in: https://zulip.com/api/register-queue
437-
@JsonSerializable(fieldRename: FieldRename.snake)
438-
class SupportedPermissionSettings {
439-
final Map<String, PermissionSettingsItem> realm;
440-
final Map<String, PermissionSettingsItem> stream;
441-
final Map<String, PermissionSettingsItem> group;
442-
443-
/// Metadata about how to interpret certain group-based permission settings,
444-
/// including all those that this client uses, based on "current" servers.
445-
///
446-
/// "Current" here means as of when this code was written, or last updated;
447-
/// details in comments below. Naturally it'd be better to have an API to
448-
/// get this information from the actual server.
449-
///
450-
/// Effectively we're counting on it being uncommon for the metadata for a
451-
/// given permission to ever change from one server version to the next,
452-
/// so that the values we take from one server version usually remain valid
453-
/// for all past and future server versions that have the corresponding
454-
/// permission at all.
455-
///
456-
/// TODO(server): Stabilize [InitialSnapshot.serverSupportedPermissionSettings]
457-
/// or a similar API, and switch to using that. See thread:
458-
/// https://chat.zulip.org/#narrow/channel/378-api-design/topic/server_supported_permission_settings/near/2247549
459-
static SupportedPermissionSettings fixture = SupportedPermissionSettings(
460-
realm: {
461-
// From the server's Realm.REALM_PERMISSION_GROUP_SETTINGS,
462-
// in zerver/models/realms.py. Current as of 6ab30fcce, 2025-08.
463-
'create_multiuse_invite_group': PermissionSettingsItem(
464-
// allow_nobody_group=True,
465-
allowEveryoneGroup: false,
466-
// default_group_name=SystemGroups.ADMINISTRATORS,
467-
),
468-
'can_access_all_users_group': PermissionSettingsItem(
469-
// require_system_group=True,
470-
// allow_nobody_group=False,
471-
allowEveryoneGroup: true,
472-
// default_group_name=SystemGroups.EVERYONE,
473-
// # Note that user_can_access_all_other_users in the web
474-
// # app is relying on members always have access.
475-
// allowed_system_groups=[SystemGroups.EVERYONE, SystemGroups.MEMBERS],
476-
),
477-
'can_add_subscribers_group': PermissionSettingsItem(
478-
// allow_nobody_group=True,
479-
allowEveryoneGroup: false,
480-
// default_group_name=SystemGroups.MEMBERS,
481-
),
482-
'can_add_custom_emoji_group': PermissionSettingsItem(
483-
// allow_nobody_group=True,
484-
allowEveryoneGroup: false,
485-
// default_group_name=SystemGroups.MEMBERS,
486-
),
487-
'can_create_bots_group': PermissionSettingsItem(
488-
// allow_nobody_group=True,
489-
allowEveryoneGroup: false,
490-
// default_group_name=SystemGroups.MEMBERS,
491-
),
492-
'can_create_groups': PermissionSettingsItem(
493-
// allow_nobody_group=True,
494-
allowEveryoneGroup: false,
495-
// default_group_name=SystemGroups.MEMBERS,
496-
),
497-
'can_create_public_channel_group': PermissionSettingsItem(
498-
// allow_nobody_group=True,
499-
allowEveryoneGroup: false,
500-
// default_group_name=SystemGroups.MEMBERS,
501-
),
502-
'can_create_private_channel_group': PermissionSettingsItem(
503-
// allow_nobody_group=True,
504-
allowEveryoneGroup: false,
505-
// default_group_name=SystemGroups.MEMBERS,
506-
),
507-
'can_create_web_public_channel_group': PermissionSettingsItem(
508-
// require_system_group=True,
509-
// allow_nobody_group=True,
510-
allowEveryoneGroup: false,
511-
// default_group_name=SystemGroups.OWNERS,
512-
// allowed_system_groups=[
513-
// SystemGroups.MODERATORS,
514-
// SystemGroups.ADMINISTRATORS,
515-
// SystemGroups.OWNERS,
516-
// SystemGroups.NOBODY,
517-
// ],
518-
),
519-
'can_create_write_only_bots_group': PermissionSettingsItem(
520-
// allow_nobody_group=True,
521-
allowEveryoneGroup: false,
522-
// default_group_name=SystemGroups.MEMBERS,
523-
),
524-
'can_delete_any_message_group': PermissionSettingsItem(
525-
// allow_nobody_group=True,
526-
allowEveryoneGroup: false,
527-
// default_group_name=SystemGroups.ADMINISTRATORS,
528-
),
529-
'can_delete_own_message_group': PermissionSettingsItem(
530-
// allow_nobody_group=True,
531-
allowEveryoneGroup: true,
532-
// default_group_name=SystemGroups.EVERYONE,
533-
),
534-
'can_invite_users_group': PermissionSettingsItem(
535-
// allow_nobody_group=True,
536-
allowEveryoneGroup: false,
537-
// default_group_name=SystemGroups.MEMBERS,
538-
),
539-
'can_manage_all_groups': PermissionSettingsItem(
540-
// allow_nobody_group=False,
541-
allowEveryoneGroup: false,
542-
// default_group_name=SystemGroups.OWNERS,
543-
),
544-
'can_manage_billing_group': PermissionSettingsItem(
545-
// allow_nobody_group=False,
546-
allowEveryoneGroup: false,
547-
// default_group_name=SystemGroups.ADMINISTRATORS,
548-
),
549-
'can_mention_many_users_group': PermissionSettingsItem(
550-
// allow_nobody_group=True,
551-
allowEveryoneGroup: true,
552-
// default_group_name=SystemGroups.ADMINISTRATORS,
553-
),
554-
'can_move_messages_between_channels_group': PermissionSettingsItem(
555-
// allow_nobody_group=True,
556-
allowEveryoneGroup: false,
557-
// default_group_name=SystemGroups.MEMBERS,
558-
),
559-
'can_move_messages_between_topics_group': PermissionSettingsItem(
560-
// allow_nobody_group=True,
561-
allowEveryoneGroup: true,
562-
// default_group_name=SystemGroups.EVERYONE,
563-
),
564-
'can_resolve_topics_group': PermissionSettingsItem(
565-
// allow_nobody_group=True,
566-
allowEveryoneGroup: true,
567-
// default_group_name=SystemGroups.EVERYONE,
568-
),
569-
'can_set_delete_message_policy_group': PermissionSettingsItem(
570-
// allow_nobody_group=True,
571-
allowEveryoneGroup: false,
572-
// default_group_name=SystemGroups.MODERATORS,
573-
),
574-
'can_set_topics_policy_group': PermissionSettingsItem(
575-
// allow_nobody_group=True,
576-
allowEveryoneGroup: true,
577-
// default_group_name=SystemGroups.MEMBERS,
578-
),
579-
'can_summarize_topics_group': PermissionSettingsItem(
580-
// allow_nobody_group=True,
581-
allowEveryoneGroup: true,
582-
// default_group_name=SystemGroups.EVERYONE,
583-
),
584-
'direct_message_initiator_group': PermissionSettingsItem(
585-
// allow_nobody_group=True,
586-
allowEveryoneGroup: true,
587-
// default_group_name=SystemGroups.EVERYONE,
588-
),
589-
'direct_message_permission_group': PermissionSettingsItem(
590-
// allow_nobody_group=True,
591-
allowEveryoneGroup: true,
592-
// default_group_name=SystemGroups.EVERYONE,
593-
),
594-
},
595-
group: {}, // Please go ahead and fill this in when we come to need it.
596-
stream: {
597-
// From the server's Stream.stream_permission_group_settings,
598-
// in zerver/models/streams.py. Current as of f9dc13014, 2025-08.
599-
"can_add_subscribers_group": PermissionSettingsItem(
600-
// allow_nobody_group=True,
601-
allowEveryoneGroup: false,
602-
// default_group_name=SystemGroups.NOBODY,
603-
),
604-
"can_administer_channel_group": PermissionSettingsItem(
605-
// allow_nobody_group=True,
606-
allowEveryoneGroup: false,
607-
// default_group_name="stream_creator_or_nobody",
608-
),
609-
"can_delete_any_message_group": PermissionSettingsItem(
610-
// allow_nobody_group=True,
611-
allowEveryoneGroup: true,
612-
// default_group_name=SystemGroups.NOBODY,
613-
),
614-
"can_delete_own_message_group": PermissionSettingsItem(
615-
// allow_nobody_group=True,
616-
allowEveryoneGroup: true,
617-
// default_group_name=SystemGroups.NOBODY,
618-
),
619-
"can_move_messages_out_of_channel_group": PermissionSettingsItem(
620-
// allow_nobody_group=True,
621-
allowEveryoneGroup: true,
622-
// default_group_name=SystemGroups.NOBODY,
623-
),
624-
"can_move_messages_within_channel_group": PermissionSettingsItem(
625-
// allow_nobody_group=True,
626-
allowEveryoneGroup: true,
627-
// default_group_name=SystemGroups.NOBODY,
628-
),
629-
"can_remove_subscribers_group": PermissionSettingsItem(
630-
// allow_nobody_group=True,
631-
allowEveryoneGroup: true,
632-
// default_group_name=SystemGroups.ADMINISTRATORS,
633-
),
634-
"can_send_message_group": PermissionSettingsItem(
635-
// allow_nobody_group=True,
636-
allowEveryoneGroup: true,
637-
// default_group_name=SystemGroups.EVERYONE,
638-
),
639-
"can_subscribe_group": PermissionSettingsItem(
640-
// allow_nobody_group=True,
641-
allowEveryoneGroup: false,
642-
// default_group_name=SystemGroups.NOBODY,
643-
),
644-
"can_resolve_topics_group": PermissionSettingsItem(
645-
// allow_nobody_group=True,
646-
allowEveryoneGroup: true,
647-
// default_group_name=SystemGroups.NOBODY,
648-
),
649-
},
650-
);
651-
652-
SupportedPermissionSettings({required this.realm, required this.stream, required this.group});
653-
654-
factory SupportedPermissionSettings.fromJson(Map<String, dynamic> json) =>
655-
_$SupportedPermissionSettingsFromJson(json);
656-
657-
Map<String, dynamic> toJson() => _$SupportedPermissionSettingsToJson(this);
658-
}
659-
660-
@JsonSerializable(fieldRename: FieldRename.snake)
661-
class PermissionSettingsItem {
662-
final bool allowEveryoneGroup;
663-
// also other fields not yet used
664-
665-
PermissionSettingsItem({required this.allowEveryoneGroup});
666-
667-
factory PermissionSettingsItem.fromJson(Map<String, dynamic> json) =>
668-
_$PermissionSettingsItemFromJson(json);
669-
670-
Map<String, dynamic> toJson() => _$PermissionSettingsItemToJson(this);
671-
}

lib/api/model/initial_snapshot.g.dart

Lines changed: 0 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)