Files
chanora/docs/references/permission-id-mapping.md
T
Edison Jwa 7968f90f7d docs: evaluate tsdeclarations codegen, map permissions, verify encoding (TODO-063,068,069)
tsdeclarations eval: direct codegen redundant (already via tsproto),
but permission ID generation and error code enum have high value.
Permission mapping: 253 TS3 permissions identified, 7 P1 for chat/moderation.
Encoding verification: tsclientlib uses strict UTF-8, UCS-2 is edge case.
2026-06-11 20:54:40 +09:00

27 KiB

TS3 Permission ID Mapping to Chanora

TODO-069 — Map TS3 permissions to Chanora's permission system.


1. TS3 Permission System Overview

1.1 Permission Tiers (from YaTQA §1.2)

Permissions are evaluated top-to-bottom, lowest tier wins:

Tier Level Description
0 Server Groups Highest value wins (unless Negate flag)
1 Client (Server level) Client-specific server permissions
2 Channel Skipped if Skip flag set
3 Channel Group Skipped if Skip flag set
4 Client (Channel level) Client-specific channel permissions

1.2 Permission Types (from Enums.toml)

Type ID1 ID2
ServerGroup ServerGroupId 0
GlobalClient ClientDbId 0
Channel ChannelId 0
ChannelGroup ChannelId ChannelGroupId
ChannelClient ChannelId ClientDbId

1.3 Special Flags

  • Skip flag: Skips channel and channel group permissions
  • Negate flag: If ANY server group has Negate, only Negate groups count
  • Grant permission: i_needed_permission_modify_power_* — controls who can modify a permission

2. Chanora's Current Permission Handling

2.1 What Exists

Component Permission Handling Location
chanora_bridge::permission_jni Android RECORD_AUDIO runtime permission only crates/chanora_bridge/src/permission_jni.rs
chanora_bridge::api::PermissionStateKind Android permission state enum (Granted/Denied/PermanentlyDenied) crates/chanora_bridge/src/api.rs
chanora_core No TS3 permission model
chanora_protocol Error code 0x0a08 (permissions_client_insufficient) recognized but no permission ID mapping crates/chanora_protocol/src/lib.rs:109
chanora_protocol::adapter Permission-gated fields (e.g., client_address empty when no permission) crates/chanora_protocol/src/dto.rs:181
VoiceJoinErrorCode::JoinDenied Generic "denied by server policy/permission" core/chanora_core/src/events.rs:267

2.2 What Does NOT Exist

  • No TS3 permission ID constants
  • No permission evaluation engine (Skip/Negate/Grant logic)
  • No per-permission checks before protocol commands
  • No permission-aware UI gating
  • No server group / channel group permission tracking

3. Permission ID Mapping

The following table maps all TS3 permission IDs from Permissions.csv / ReSpeak reference §3 to Chanora's current handling.

3.1 Server Instance Permissions

Permission Name Category Chanora Status Notes
b_serverinstance_help_view Query Not needed ServerQuery only
b_serverinstance_version_view Query Not needed ServerQuery only
b_serverinstance_info_view Query Not needed ServerQuery only
b_serverinstance_virtualserver_list Query Not needed ServerQuery only
b_serverinstance_binding_list Query Not needed ServerQuery only
b_serverinstance_permission_list Query Not needed ServerQuery only
b_serverinstance_permission_find Query Not needed ServerQuery only
b_virtualserver_create Admin Not needed Admin operation
b_virtualserver_delete Admin Not needed Admin operation
b_virtualserver_start_any Admin Not needed Admin operation
b_virtualserver_stop_any Admin Not needed Admin operation
b_virtualserver_change_machine_id Admin Not needed Admin operation
b_virtualserver_change_template Admin Not needed Admin operation
b_serverquery_login Query Not needed ServerQuery only
b_serverinstance_textmessage_send Query Not needed ServerQuery only
b_serverinstance_log_view Query Not needed ServerQuery only
b_serverinstance_log_add Query Not needed ServerQuery only
b_serverinstance_stop Admin Not needed Admin operation
b_serverinstance_modify_settings Admin Not needed Admin operation
b_serverinstance_modify_querygroup Admin Not needed Admin operation
b_serverinstance_modify_templates Admin Not needed Admin operation

3.2 Virtual Server Permissions

Permission Name Category Chanora Status Priority Notes
b_virtualserver_select Query Not needed ServerQuery only
b_virtualserver_info_view Read Implicit P3 Used by serverinfo command
b_virtualserver_connectioninfo_view Read Implicit P3 Used by serverrequestconnectioninfo
b_virtualserver_channel_list Read Implicit P3 Used by channellist command
b_virtualserver_channel_search Read Not needed ServerQuery only
b_virtualserver_client_list Read Implicit P3 Used by clientlist command
b_virtualserver_client_search Read Not needed ServerQuery only
b_virtualserver_client_dblist Read Not needed ServerQuery only
b_virtualserver_client_dbsearch Read Not needed ServerQuery only
b_virtualserver_client_dbinfo Read Implicit P3 Used by clientdbinfo
b_virtualserver_permission_find Read Not needed ServerQuery only
b_virtualserver_custom_search Read Not needed ServerQuery only
b_virtualserver_start Admin Not needed Admin operation
b_virtualserver_stop Admin Not needed Admin operation
b_virtualserver_token_list Admin Not needed Admin operation
b_virtualserver_token_add Admin Not needed Admin operation
b_virtualserver_token_use Connect Implicit P2 Used in clientinit default_token
b_virtualserver_token_delete Admin Not needed Admin operation
b_virtualserver_log_view Query Not needed ServerQuery only
b_virtualserver_log_add Query Not needed ServerQuery only
b_virtualserver_join_ignore_password Connect Not needed Rare
b_virtualserver_notify_register Read Implicit P3 Used by servernotifyregister
b_virtualserver_notify_unregister Read Implicit P3 Used by servernotifyunregister
b_virtualserver_snapshot_create Admin Not needed Admin operation
b_virtualserver_snapshot_deploy Admin Not needed Admin operation
b_virtualserver_permission_reset Admin Not needed Admin operation
b_virtualserver_modify_name Admin Not needed Admin operation
b_virtualserver_modify_welcomemessage Admin Not needed Admin operation
b_virtualserver_modify_maxclients Admin Not needed Admin operation
b_virtualserver_modify_reserved_slots Admin Not needed Admin operation
b_virtualserver_modify_password Admin Not needed Admin operation
b_virtualserver_modify_default_servergroup Admin Not needed Admin operation
b_virtualserver_modify_default_channelgroup Admin Not needed Admin operation
b_virtualserver_modify_default_channeladmingroup Admin Not needed Admin operation
b_virtualserver_modify_channel_forced_silence Admin Not needed Admin operation
b_virtualserver_modify_complain Admin Not needed Admin operation
b_virtualserver_modify_antiflood Admin Not needed Admin operation
b_virtualserver_modify_ft_settings Admin Not needed Admin operation
b_virtualserver_modify_ft_quotas Admin Not needed Admin operation
b_virtualserver_modify_hostmessage Admin Not needed Admin operation
b_virtualserver_modify_hostbanner Admin Not needed Admin operation
b_virtualserver_modify_hostbutton Admin Not needed Admin operation
b_virtualserver_modify_port Admin Not needed Admin operation
b_virtualserver_modify_autostart Admin Not needed Admin operation
b_virtualserver_modify_needed_identity_security_level Admin Not needed Admin operation
b_virtualserver_modify_priority_speaker_dimm_modificator Admin Not needed Admin operation
b_virtualserver_modify_log_settings Admin Not needed Admin operation
b_virtualserver_modify_min_client_version Admin Not needed Admin operation
b_virtualserver_modify_icon_id Admin Not needed Admin operation
b_virtualserver_modify_weblist Admin Not needed Admin operation
b_virtualserver_modify_codec_encryption_mode Admin Not needed Admin operation
b_virtualserver_modify_temporary_passwords Admin Not needed Admin operation
b_virtualserver_modify_temporary_passwords_own Admin Not needed Admin operation
b_virtualserver_modify_channel_temp_delete_delay_default Admin Not needed Admin operation
b_virtualserver_modify_nickname Admin Not needed Admin operation
b_virtualserver_modify_integrations Admin Not needed Admin operation

3.3 Channel Permissions

Permission Name Category Chanora Status Priority Notes
i_channel_min_depth Channel Not needed Server-side only
i_channel_max_depth Channel Not needed Server-side only
b_channel_group_inheritance_end Channel Not needed Server-side only
i_channel_permission_modify_power Admin Not needed Admin operation
i_channel_needed_permission_modify_power Admin Not needed Admin operation
b_channel_info_view Read Implicit P3 Used by channelinfo
b_channel_create_child Channel Not needed Server-side only
b_channel_create_permanent Channel Not needed Server-side only
b_channel_create_semi_permanent Channel Not needed Server-side only
b_channel_create_temporary Channel Not needed Server-side only
b_channel_create_private Channel Not needed Server-side only
b_channel_create_with_topic Channel Not needed Server-side only
b_channel_create_with_description Channel Not needed Server-side only
b_channel_create_with_password Channel Not needed Server-side only
b_channel_create_modify_with_codec_speex8 Channel Not needed Server-side only
b_channel_create_modify_with_codec_speex16 Channel Not needed Server-side only
b_channel_create_modify_with_codec_speex32 Channel Not needed Server-side only
b_channel_create_modify_with_codec_celtmono48 Channel Not needed Server-side only
b_channel_create_modify_with_codec_opusvoice Channel Not needed Server-side only
b_channel_create_modify_with_codec_opusmusic Channel Not needed Server-side only
i_channel_create_modify_with_codec_maxquality Channel Not needed Server-side only
i_channel_create_modify_with_codec_latency_factor_min Channel Not needed Server-side only
b_channel_create_with_maxclients Channel Not needed Server-side only
b_channel_create_with_maxfamilyclients Channel Not needed Server-side only
b_channel_create_with_sortorder Channel Not needed Server-side only
b_channel_create_with_default Channel Not needed Server-side only
b_channel_create_with_needed_talk_power Channel Not needed Server-side only
b_channel_create_modify_with_force_password Channel Not needed Server-side only
i_channel_create_modify_with_temp_delete_delay Channel Not needed Server-side only
b_channel_modify_parent Channel Not needed Server-side only
b_channel_modify_make_default Channel Not needed Server-side only
b_channel_modify_make_permanent Channel Not needed Server-side only
b_channel_modify_make_semi_permanent Channel Not needed Server-side only
b_channel_modify_make_temporary Channel Not needed Server-side only
b_channel_modify_name Channel Not needed Server-side only
b_channel_modify_topic Channel Not needed Server-side only
b_channel_modify_description Channel Not needed Server-side only
b_channel_modify_password Channel Not needed Server-side only
b_channel_modify_codec Channel Not needed Server-side only
b_channel_modify_codec_quality Channel Not needed Server-side only
b_channel_modify_codec_latency_factor Channel Not needed Server-side only
b_channel_modify_maxclients Channel Not needed Server-side only
b_channel_modify_maxfamilyclients Channel Not needed Server-side only
b_channel_modify_sortorder Channel Not needed Server-side only
b_channel_modify_needed_talk_power Channel Not needed Server-side only
i_channel_modify_power Channel Not needed Server-side only
i_channel_needed_modify_power Channel Not needed Server-side only
b_channel_modify_make_codec_encrypted Channel Not needed Server-side only
b_channel_modify_temp_delete_delay Channel Not needed Server-side only
b_channel_delete_permanent Channel Not needed Server-side only
b_channel_delete_semi_permanent Channel Not needed Server-side only
b_channel_delete_temporary Channel Not needed Server-side only
b_channel_delete_flag_force Channel Not needed Server-side only
i_channel_delete_power Channel Not needed Server-side only
i_channel_needed_delete_power Channel Not needed Server-side only
b_channel_join_permanent Join Implicit P1 Used by clientmove
b_channel_join_semi_permanent Join Implicit P1 Used by clientmove
b_channel_join_temporary Join Implicit P1 Used by clientmove
b_channel_join_ignore_password Join Not needed P3 Rare
b_channel_join_ignore_maxclients Join Not needed P3 Rare
i_channel_join_power Join Implicit P1 Server evaluates on join
i_channel_needed_join_power Join Implicit P1 Server evaluates on join
i_channel_subscribe_power Subscribe Implicit P2 Used by channelsubscribe
i_channel_needed_subscribe_power Subscribe Implicit P2 Used by channelsubscribe
i_channel_description_view_power Read Not needed P3 Low priority
i_channel_needed_description_view_power Read Not needed P3 Low priority

3.4 Group Permissions

Permission Name Category Chanora Status Priority Notes
i_icon_id Group Not needed Server-side only
i_max_icon_filesize Group Not needed Server-side only
b_icon_manage Group Not needed Server-side only
b_group_is_permanent Group Not needed Server-side only
i_group_auto_update_type Group Not needed Server-side only
i_group_auto_update_max_value Group Not needed Server-side only
i_group_sort_id Group Not needed Server-side only
i_group_show_name_in_tree Group Not needed Server-side only
b_virtualserver_servergroup_list Group Not needed ServerQuery only
b_virtualserver_servergroup_permission_list Group Not needed ServerQuery only
b_virtualserver_servergroup_client_list Group Not needed ServerQuery only
b_virtualserver_channelgroup_list Group Not needed ServerQuery only
b_virtualserver_channelgroup_permission_list Group Not needed ServerQuery only
b_virtualserver_channelgroup_client_list Group Not needed ServerQuery only
b_virtualserver_client_permission_list Group Not needed ServerQuery only
b_virtualserver_channel_permission_list Group Not needed ServerQuery only
b_virtualserver_channelclient_permission_list Group Not needed ServerQuery only
b_virtualserver_servergroup_create Admin Not needed Admin operation
b_virtualserver_channelgroup_create Admin Not needed Admin operation
i_group_modify_power Admin Not needed Admin operation
i_group_needed_modify_power Admin Not needed Admin operation
i_group_member_add_power Admin Not needed Admin operation
i_group_needed_member_add_power Admin Not needed Admin operation
i_group_member_remove_power Admin Not needed Admin operation
i_group_needed_member_remove_power Admin Not needed Admin operation
i_permission_modify_power Admin Not needed Admin operation
b_permission_modify_power_ignore Admin Not needed Admin operation
b_virtualserver_servergroup_delete Admin Not needed Admin operation
b_virtualserver_channelgroup_delete Admin Not needed Admin operation

3.5 Client Permissions

Permission Name Category Chanora Status Priority Notes
i_client_permission_modify_power Admin Not needed Admin operation
i_client_needed_permission_modify_power Admin Not needed Admin operation
i_client_max_clones_uid Connect Not needed Server-side only
i_client_max_idletime Client Not needed P3 Could display idle timeout
i_client_max_avatar_filesize Client Not needed P3 Could limit avatar upload
i_client_max_channel_subscriptions Client Not needed P3 Could limit subscriptions
b_client_is_priority_speaker Voice Implicit P1 Tracked in Client.is_priority_speaker
b_client_skip_channelgroup_permissions Client Not needed Server-side only
b_client_force_push_to_talk Voice Not needed P2 Could force PTT mode
b_client_ignore_bans Client Not needed Server-side only
b_client_ignore_antiflood Client Not needed Server-side only
b_client_issue_client_query_command Query Not needed ServerQuery only
b_client_use_reserved_slot Connect Not needed P3 Could show slot availability
b_client_use_channel_commander Voice Not needed P2 Channel commander feature
b_client_request_talker Voice Implicit P1 client_talk_request in events
b_client_avatar_delete_other Client Not needed Server-side only
b_client_is_sticky Client Not needed P3 Could show sticky indicator
b_client_ignore_sticky Client Not needed P3 Could show sticky indicator
b_client_info_view Read Implicit P1 Used by clientinfo
b_client_permissionoverview_view Read Not needed ServerQuery only
b_client_permissionoverview_own Read Not needed ServerQuery only
b_client_remoteaddress_view Read Implicit P2 Gated in BridgeClientProfile.client_address
i_client_serverquery_view_power Read Not needed P3 Could gate query client visibility
i_client_needed_serverquery_view_power Read Not needed P3 Could gate query client visibility
b_client_custom_info_view Read Not needed P3 Custom fields
i_client_kick_from_server_power Moderation Not needed P1 Future: kick UI
i_client_needed_kick_from_server_power Moderation Not needed P1 Future: kick UI
i_client_kick_from_channel_power Moderation Not needed P1 Future: kick UI
i_client_needed_kick_from_channel_power Moderation Not needed P1 Future: kick UI
i_client_ban_power Moderation Not needed P1 Future: ban UI
i_client_needed_ban_power Moderation Not needed P1 Future: ban UI
i_client_move_power Moderation Not needed P1 Future: move UI
i_client_needed_move_power Moderation Not needed P1 Future: move UI
i_client_complain_power Moderation Not needed P2 Future: complain UI
i_client_needed_complain_power Moderation Not needed P2 Future: complain UI
b_client_complain_list Moderation Not needed P2 Future: complain UI
b_client_complain_delete_own Moderation Not needed P2 Future: complain UI
b_client_complain_delete Moderation Not needed P2 Future: complain UI
b_client_ban_list Moderation Not needed P2 Future: ban UI
b_client_ban_create Moderation Not needed P2 Future: ban UI
b_client_ban_delete_own Moderation Not needed P2 Future: ban UI
b_client_ban_delete Moderation Not needed P2 Future: ban UI
i_client_ban_max_bantime Moderation Not needed P2 Future: ban UI
i_client_private_textmessage_power Chat Not needed P1 Could gate DM UI
i_client_needed_private_textmessage_power Chat Not needed P1 Could gate DM UI
b_client_server_textmessage_send Chat Not needed P1 Could gate server chat
b_client_channel_textmessage_send Chat Not needed P1 Could gate channel chat
b_client_offline_textmessage_send Chat Not needed P2 Offline messages
i_client_talk_power Voice Implicit P1 Tracked in Client.talk_power
i_client_needed_talk_power Voice Implicit P1 Compared against channel needed_talk_power
i_client_poke_power Chat Not needed P2 Could gate poke UI
i_client_needed_poke_power Chat Not needed P2 Could gate poke UI
b_client_set_flag_talker Voice Not needed P1 Future: grant talk power
i_client_whisper_power Voice Not needed P2 Whisper feature
i_client_needed_whisper_power Voice Not needed P2 Whisper feature
b_client_modify_description Client Not needed P2 Future: edit description
b_client_modify_own_description Client Not needed P2 Future: edit own description
b_client_modify_dbproperties Client Not needed Server-side only
b_client_delete_dbproperties Client Not needed Server-side only
b_client_create_modify_serverquery_login Query Not needed ServerQuery only

3.6 File Transfer Permissions

Permission Name Category Chanora Status Priority Notes
b_ft_ignore_password File Not needed P3 File browser
b_ft_transfer_list File Not needed P3 File browser
i_ft_file_upload_power File Not needed P3 File browser
i_ft_needed_file_upload_power File Not needed P3 File browser
i_ft_file_download_power File Not needed P3 File browser
i_ft_needed_file_download_power File Not needed P3 File browser
i_ft_file_delete_power File Not needed P3 File browser
i_ft_needed_file_delete_power File Not needed P3 File browser
i_ft_file_rename_power File Not needed P3 File browser
i_ft_needed_file_rename_power File Not needed P3 File browser
i_ft_file_browse_power File Not needed P3 File browser
i_ft_needed_file_browse_power File Not needed P3 File browser
i_ft_directory_create_power File Not needed P3 File browser
i_ft_needed_directory_create_power File Not needed P3 File browser
i_ft_quota_mb_download_per_client File Not needed P3 File browser
i_ft_quota_mb_upload_per_client File Not needed P3 File browser

4. Summary: Permissions Chanora Should Track

4.1 Already Handled (Implicit via Protocol)

These permissions are evaluated server-side; Chanora sends commands and handles rejection:

Permission How Handled
b_channel_join_* voice_join → server rejects with error code
i_channel_join_power / i_channel_needed_join_power Server evaluates; Chanora gets JoinDenied
b_client_info_view clientinfo command; server returns error if denied
b_client_remoteaddress_view client_address field gated in BridgeClientProfile
i_client_talk_power / i_client_needed_talk_power Tracked in Client.talk_power; server enforces
b_client_is_priority_speaker Tracked in client state
b_client_request_talker Tracked via client_talk_request events

4.2 Missing — Should Add (P1)

Permission Reason Implementation
i_client_kick_from_server_power / i_client_kick_from_channel_power Future kick UI needs to know if user can kick Add to BridgeClientProfile or PermissionHints
i_client_ban_power Future ban UI Add to permission hints
i_client_move_power Future move UI Add to permission hints
i_client_private_textmessage_power Gate DM input in UI Add to permission hints
b_client_server_textmessage_send Gate server chat input Add to permission hints
b_client_channel_textmessage_send Gate channel chat input Add to permission hints
b_client_set_flag_talker Future "grant talk power" button Add to permission hints

4.3 Missing — Nice to Have (P2-P3)

Permission Reason
b_client_force_push_to_talk Could force PTT mode in UI
b_client_use_channel_commander Channel commander feature
i_client_whisper_power Whisper feature
b_client_complain_* Complain UI
b_client_ban_* Ban management UI
i_ft_* File transfer browser permissions

5.1 Permission Constants Module

Generate from Permissions.csv:

// crates/chanora_protocol/src/permissions.rs
// Auto-generated from ReSpeak/tsdeclarations Permissions.csv

pub const B_CHANNEL_JOIN_PERMANENT: &str = "b_channel_join_permanent";
pub const B_CHANNEL_JOIN_SEMI_PERMANENT: &str = "b_channel_join_semi_permanent";
pub const B_CHANNEL_JOIN_TEMPORARY: &str = "b_channel_join_temporary";
pub const I_CHANNEL_JOIN_POWER: &str = "i_channel_join_power";
pub const I_CHANNEL_NEEDED_JOIN_POWER: &str = "i_channel_needed_join_power";
// ... all 253 permissions

5.2 Permission Hints Integration

Extend the existing PermissionHints bitflags (already in Enums.toml / ReSpeak §6) to cover the P1 permissions. The server already sends PermissionHints in clientinfo responses — Chanora just needs to parse and expose them.

5.3 UI Gating

Add permission-aware UI state to BridgeEvent or BridgeClientProfile:

pub struct BridgePermissionHints {
    pub can_kick_server: bool,
    pub can_kick_channel: bool,
    pub can_ban: bool,
    pub can_move: bool,
    pub can_send_private_message: bool,
    pub can_send_server_message: bool,
    pub can_send_channel_message: bool,
    pub can_grant_talk_power: bool,
}

Created: 2026-06-11 for TODO-069