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/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/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/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/resources/js/components/RoomDetailsList.vue b/resources/js/components/RoomDetailsList.vue index a2a10b978..cb3e27361 100644 --- a/resources/js/components/RoomDetailsList.vue +++ b/resources/js/components/RoomDetailsList.vue @@ -4,7 +4,7 @@ :class="{ 'md:flex-row': props.inline }" > -
+
diff --git a/resources/js/components/RoomHeader.vue b/resources/js/components/RoomHeader.vue index 972c64623..f0a301dae 100644 --- a/resources/js/components/RoomHeader.vue +++ b/resources/js/components/RoomHeader.vue @@ -113,4 +113,5 @@ const props = defineProps({ }); const emit = defineEmits(["joinedMembership", "reload", "invalidCode"]); + 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") }} + +
+
+ + +
+ +
+