From 719404bd78c820ba329cd10582913c2bbf811930 Mon Sep 17 00:00:00 2001 From: danielwujecki Date: Mon, 16 Feb 2026 12:30:31 +0100 Subject: [PATCH 1/3] admin setting to hide room owner on join of unauthenticated users --- CHANGELOG.md | 2 ++ .../Controllers/api/v1/SettingsController.php | 1 + app/Http/Requests/UpdateSettings.php | 1 + app/Http/Resources/Config.php | 1 + app/Http/Resources/Settings.php | 1 + app/Settings/RoomSettings.php | 2 ++ ...hide_owner_for_guests_to_room_settings.php | 16 ++++++++++ lang/ar/admin.php | 1 + lang/de-gender/admin.php | 1 + lang/de/admin.php | 1 + lang/en/admin.php | 1 + lang/fa/admin.php | 1 + lang/fr/admin.php | 1 + resources/js/components/RoomDetailsList.vue | 6 +++- resources/js/components/RoomHeader.vue | 12 ++++++++ resources/js/views/AdminSettings.vue | 29 +++++++++++++++++++ 16 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 database/settings/2026_02_16_085258_add_room_hide_owner_for_guests_to_room_settings.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a4b621f7..24eac302f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- Add admin setting to hide room owner on join of unauthenticated users + ## [v4.12.0] - 2026-02-09 ### Added diff --git a/app/Http/Controllers/api/v1/SettingsController.php b/app/Http/Controllers/api/v1/SettingsController.php index 8fbb61e33..55aacc6d4 100644 --- a/app/Http/Controllers/api/v1/SettingsController.php +++ b/app/Http/Controllers/api/v1/SettingsController.php @@ -183,6 +183,7 @@ public function update(UpdateSettings $request) $roomSettings->auto_delete_never_used_period = $request->enum('room_auto_delete_never_used_period', TimePeriod::class); $roomSettings->auto_delete_deadline_period = $request->enum('room_auto_delete_deadline_period', TimePeriod::class); $roomSettings->file_terms_of_use = $request->input('room_file_terms_of_use'); + $roomSettings->hide_owner_for_guests = $request->input('room_hide_owner_for_guests'); $userSettings->password_change_allowed = $request->boolean('user_password_change_allowed'); diff --git a/app/Http/Requests/UpdateSettings.php b/app/Http/Requests/UpdateSettings.php index 2d141d3e2..a84fce98e 100644 --- a/app/Http/Requests/UpdateSettings.php +++ b/app/Http/Requests/UpdateSettings.php @@ -69,6 +69,7 @@ public function rules() 'room_auto_delete_never_used_period' => ['required', 'numeric', Rule::enum(TimePeriod::class)], 'room_auto_delete_deadline_period' => ['required', 'numeric', Rule::enum(TimePeriod::class)->only([TimePeriod::ONE_WEEK, TimePeriod::TWO_WEEKS, TimePeriod::ONE_MONTH])], 'room_file_terms_of_use' => ['nullable', 'string', 'max:65000'], + 'room_hide_owner_for_guests' => ['required', 'boolean'], 'user_password_change_allowed' => ['required', 'boolean'], diff --git a/app/Http/Resources/Config.php b/app/Http/Resources/Config.php index e539a143e..21a34b9fa 100644 --- a/app/Http/Resources/Config.php +++ b/app/Http/Resources/Config.php @@ -62,6 +62,7 @@ public function toArray($request) 'token_expiration' => $roomSettings->token_expiration, 'refresh_rate' => config('bigbluebutton.room_refresh_rate'), 'file_terms_of_use' => $roomSettings->file_terms_of_use, + 'hide_owner_for_guests' => $roomSettings->hide_owner_for_guests, ], 'user' => [ 'password_change_allowed' => $userSettings->password_change_allowed, diff --git a/app/Http/Resources/Settings.php b/app/Http/Resources/Settings.php index 6b50ecbb1..eefff25b3 100644 --- a/app/Http/Resources/Settings.php +++ b/app/Http/Resources/Settings.php @@ -64,6 +64,7 @@ public function toArray($request) 'room_auto_delete_deadline_period' => $roomSettings->auto_delete_deadline_period, 'room_token_expiration' => $roomSettings->token_expiration, 'room_file_terms_of_use' => $roomSettings->file_terms_of_use, + 'room_hide_owner_for_guests' => $roomSettings->hide_owner_for_guests, 'user_password_change_allowed' => $userSettings->password_change_allowed, 'recording_server_usage_enabled' => $recordingSettings->server_usage_enabled, 'recording_server_usage_retention_period' => $recordingSettings->server_usage_retention_period, diff --git a/app/Settings/RoomSettings.php b/app/Settings/RoomSettings.php index bd3e8cef4..cd96e77c6 100644 --- a/app/Settings/RoomSettings.php +++ b/app/Settings/RoomSettings.php @@ -19,6 +19,8 @@ class RoomSettings extends Settings public ?string $file_terms_of_use; + public bool $hide_owner_for_guests; + public static function group(): string { return 'room'; diff --git a/database/settings/2026_02_16_085258_add_room_hide_owner_for_guests_to_room_settings.php b/database/settings/2026_02_16_085258_add_room_hide_owner_for_guests_to_room_settings.php new file mode 100644 index 000000000..e76d82a54 --- /dev/null +++ b/database/settings/2026_02_16_085258_add_room_hide_owner_for_guests_to_room_settings.php @@ -0,0 +1,16 @@ +migrator->add('room.hide_owner_for_guests', false); + } + + public function down(): void + { + $this->migrator->delete('room.hide_owner_for_guests'); + } +}; diff --git a/lang/ar/admin.php b/lang/ar/admin.php index c1fa8b16b..90a9408a9 100644 --- a/lang/ar/admin.php +++ b/lang/ar/admin.php @@ -388,6 +388,7 @@ 'description' => 'الفترة منذ آخر استخدام التي يتم بعدها حذف روابط الغرف المخصصة تلقائيًا.', 'title' => 'مدة صلاحية روابط الغرف المخصصة', ], + 'room_hide_owner_for_guests' => 'Hide the room owner from unauthenticated users', 'six_month' => '6 أشهر (180 يومًا)', 'statistics' => [ 'meetings' => [ diff --git a/lang/de-gender/admin.php b/lang/de-gender/admin.php index 2a0663555..19ea8b315 100644 --- a/lang/de-gender/admin.php +++ b/lang/de-gender/admin.php @@ -368,6 +368,7 @@ 'description' => 'Zeitraum ab der letzten Nutzung, wonach die personalisierten Raumlinks automatisch gelöscht werden.', 'title' => 'Ablaufzeit für personalisierte Raumlinks', ], + 'room_hide_owner_for_guests' => 'Eigentümer eines Raumes für Gäste verstecken', 'six_month' => '6 Monate (180 Tage)', 'statistics' => [ 'meetings' => [ diff --git a/lang/de/admin.php b/lang/de/admin.php index 62a5accdf..fd3a0a899 100644 --- a/lang/de/admin.php +++ b/lang/de/admin.php @@ -388,6 +388,7 @@ 'description' => 'Zeitraum ab der letzten Nutzung, wonach die personalisierten Raumlinks automatisch gelöscht werden.', 'title' => 'Ablaufzeit für personalisierte Raumlinks', ], + 'room_hide_owner_for_guests' => 'Eigentümer eines Raumes für Gäste verstecken', 'six_month' => '6 Monate (180 Tage)', 'statistics' => [ 'meetings' => [ diff --git a/lang/en/admin.php b/lang/en/admin.php index c9126efa5..6a423dac1 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -388,6 +388,7 @@ 'description' => 'Time period since last usage, after which personalized room links gets automatically removed.', 'title' => 'Expiration time for personalized room links', ], + 'room_hide_owner_for_guests' => 'Hide the room owner from unauthenticated users', 'six_month' => '6 Months (180 Days)', 'statistics' => [ 'meetings' => [ diff --git a/lang/fa/admin.php b/lang/fa/admin.php index 9e2c44ea5..ab6be1e72 100644 --- a/lang/fa/admin.php +++ b/lang/fa/admin.php @@ -386,6 +386,7 @@ 'description' => 'مدت زمان از آخرین استفاده، پس از آن لینک‌های شخصی‌سازی‌شده اتاق به‌طور خودکار حذف می‌شوند.', 'title' => 'زمان انقضا برای لینک‌های شخصی‌سازی‌شده اتاق', ], + 'room_hide_owner_for_guests' => 'Hide the room owner from unauthenticated users', 'six_month' => '6 ماه (180 روز)', 'statistics' => [ 'meetings' => [ diff --git a/lang/fr/admin.php b/lang/fr/admin.php index 1d27b9f21..fcee7141e 100644 --- a/lang/fr/admin.php +++ b/lang/fr/admin.php @@ -388,6 +388,7 @@ 'description' => 'Période depuis la dernière utilisation, après laquelle les liens de salle personnalisés sont automatiquement supprimés.', 'title' => 'Délai d\'expiration des liens de salle personnalisés', ], + 'room_hide_owner_for_guests' => 'Masquer le propriétaire de la salle pour les utilisateurs non authentifiés', 'six_month' => '6 mois (180 jours)', 'statistics' => [ 'meetings' => [ diff --git a/resources/js/components/RoomDetailsList.vue b/resources/js/components/RoomDetailsList.vue index a2a10b978..5335ce4c3 100644 --- a/resources/js/components/RoomDetailsList.vue +++ b/resources/js/components/RoomDetailsList.vue @@ -4,7 +4,7 @@ :class="{ 'md:flex-row': props.inline }" > -
+
@@ -91,5 +91,9 @@ const props = defineProps({ type: Boolean, default: false, }, + showRoomOwner: { + type: Boolean, + default: true, + }, }); diff --git a/resources/js/components/RoomHeader.vue b/resources/js/components/RoomHeader.vue index 972c64623..765d6534b 100644 --- a/resources/js/components/RoomHeader.vue +++ b/resources/js/components/RoomHeader.vue @@ -14,6 +14,7 @@ :room="props.room" :show-description="true" :inline="detailsInline" + :show-room-owner="showRoomOwner" />
@@ -69,9 +70,12 @@
diff --git a/resources/js/views/AdminSettings.vue b/resources/js/views/AdminSettings.vue index 196ff23ed..55044f789 100644 --- a/resources/js/views/AdminSettings.vue +++ b/resources/js/views/AdminSettings.vue @@ -1018,6 +1018,35 @@ />
+
+ + {{ $t("admin.settings.room_hide_owner_for_guests") }} + +
+
+ + +
+ +
+
From cb7d147c1bf61ea4e982f2a6c3e2d76d439a8ead Mon Sep 17 00:00:00 2001 From: danielwujecki Date: Mon, 16 Feb 2026 12:34:13 +0100 Subject: [PATCH 2/3] remove all non-english locale changes --- lang/ar/admin.php | 1 - lang/de-gender/admin.php | 1 - lang/de/admin.php | 1 - lang/fa/admin.php | 1 - lang/fr/admin.php | 1 - 5 files changed, 5 deletions(-) diff --git a/lang/ar/admin.php b/lang/ar/admin.php index 90a9408a9..c1fa8b16b 100644 --- a/lang/ar/admin.php +++ b/lang/ar/admin.php @@ -388,7 +388,6 @@ 'description' => 'الفترة منذ آخر استخدام التي يتم بعدها حذف روابط الغرف المخصصة تلقائيًا.', 'title' => 'مدة صلاحية روابط الغرف المخصصة', ], - 'room_hide_owner_for_guests' => 'Hide the room owner from unauthenticated users', 'six_month' => '6 أشهر (180 يومًا)', 'statistics' => [ 'meetings' => [ diff --git a/lang/de-gender/admin.php b/lang/de-gender/admin.php index 19ea8b315..2a0663555 100644 --- a/lang/de-gender/admin.php +++ b/lang/de-gender/admin.php @@ -368,7 +368,6 @@ 'description' => 'Zeitraum ab der letzten Nutzung, wonach die personalisierten Raumlinks automatisch gelöscht werden.', 'title' => 'Ablaufzeit für personalisierte Raumlinks', ], - 'room_hide_owner_for_guests' => 'Eigentümer eines Raumes für Gäste verstecken', 'six_month' => '6 Monate (180 Tage)', 'statistics' => [ 'meetings' => [ diff --git a/lang/de/admin.php b/lang/de/admin.php index fd3a0a899..62a5accdf 100644 --- a/lang/de/admin.php +++ b/lang/de/admin.php @@ -388,7 +388,6 @@ 'description' => 'Zeitraum ab der letzten Nutzung, wonach die personalisierten Raumlinks automatisch gelöscht werden.', 'title' => 'Ablaufzeit für personalisierte Raumlinks', ], - 'room_hide_owner_for_guests' => 'Eigentümer eines Raumes für Gäste verstecken', 'six_month' => '6 Monate (180 Tage)', 'statistics' => [ 'meetings' => [ diff --git a/lang/fa/admin.php b/lang/fa/admin.php index ab6be1e72..9e2c44ea5 100644 --- a/lang/fa/admin.php +++ b/lang/fa/admin.php @@ -386,7 +386,6 @@ 'description' => 'مدت زمان از آخرین استفاده، پس از آن لینک‌های شخصی‌سازی‌شده اتاق به‌طور خودکار حذف می‌شوند.', 'title' => 'زمان انقضا برای لینک‌های شخصی‌سازی‌شده اتاق', ], - 'room_hide_owner_for_guests' => 'Hide the room owner from unauthenticated users', 'six_month' => '6 ماه (180 روز)', 'statistics' => [ 'meetings' => [ diff --git a/lang/fr/admin.php b/lang/fr/admin.php index fcee7141e..1d27b9f21 100644 --- a/lang/fr/admin.php +++ b/lang/fr/admin.php @@ -388,7 +388,6 @@ 'description' => 'Période depuis la dernière utilisation, après laquelle les liens de salle personnalisés sont automatiquement supprimés.', 'title' => 'Délai d\'expiration des liens de salle personnalisés', ], - 'room_hide_owner_for_guests' => 'Masquer le propriétaire de la salle pour les utilisateurs non authentifiés', 'six_month' => '6 mois (180 jours)', 'statistics' => [ 'meetings' => [ From fbd1047c09af065a693462d825eff9333f8d4175 Mon Sep 17 00:00:00 2001 From: danielwujecki Date: Mon, 16 Feb 2026 13:03:02 +0100 Subject: [PATCH 3/3] hide room owner from API response for unauthenticated users --- app/Http/Resources/Config.php | 1 - app/Http/Resources/Room.php | 10 ++++++++-- resources/js/components/RoomDetailsList.vue | 6 +----- resources/js/components/RoomHeader.vue | 11 ----------- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/app/Http/Resources/Config.php b/app/Http/Resources/Config.php index 21a34b9fa..e539a143e 100644 --- a/app/Http/Resources/Config.php +++ b/app/Http/Resources/Config.php @@ -62,7 +62,6 @@ public function toArray($request) 'token_expiration' => $roomSettings->token_expiration, 'refresh_rate' => config('bigbluebutton.room_refresh_rate'), 'file_terms_of_use' => $roomSettings->file_terms_of_use, - 'hide_owner_for_guests' => $roomSettings->hide_owner_for_guests, ], 'user' => [ 'password_change_allowed' => $userSettings->password_change_allowed, diff --git a/app/Http/Resources/Room.php b/app/Http/Resources/Room.php index 6f07fd751..1f033537e 100644 --- a/app/Http/Resources/Room.php +++ b/app/Http/Resources/Room.php @@ -5,6 +5,7 @@ use App\Http\Resources\User as UserResource; use App\Models\RoomToken; use App\Services\RoomAuthService; +use App\Settings\RoomSettings; use Auth; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\Gate; @@ -82,13 +83,18 @@ public function toArray($request) $latestMeeting->setRelation('room', $this->resource); } + $roomSettings = app(RoomSettings::class); + + // Check if user is authenticated or room owner should be shown to everyone + $showOwner = Auth::check() || !$roomSettings->hide_owner_for_guests; + return [ 'id' => $this->id, 'name' => $this->name, - 'owner' => [ + 'owner' => $this->when($showOwner, [ 'id' => $this->owner->id, 'name' => $this->owner->fullname, - ], + ]), 'last_meeting' => new LastMeeting($latestMeeting), 'type' => new RoomType($this->roomType)->withFeatures(), 'model_name' => $this->model_name, diff --git a/resources/js/components/RoomDetailsList.vue b/resources/js/components/RoomDetailsList.vue index 5335ce4c3..cb3e27361 100644 --- a/resources/js/components/RoomDetailsList.vue +++ b/resources/js/components/RoomDetailsList.vue @@ -4,7 +4,7 @@ :class="{ 'md:flex-row': props.inline }" > -
+
@@ -91,9 +91,5 @@ const props = defineProps({ type: Boolean, default: false, }, - showRoomOwner: { - type: Boolean, - default: true, - }, }); diff --git a/resources/js/components/RoomHeader.vue b/resources/js/components/RoomHeader.vue index 765d6534b..f0a301dae 100644 --- a/resources/js/components/RoomHeader.vue +++ b/resources/js/components/RoomHeader.vue @@ -14,7 +14,6 @@ :room="props.room" :show-description="true" :inline="detailsInline" - :show-room-owner="showRoomOwner" />
@@ -70,12 +69,9 @@