From 793c8cd9ed71aff89231a8471866e4210e8f8ca5 Mon Sep 17 00:00:00 2001 From: adonis Date: Tue, 25 Aug 2026 14:19:22 +0330 Subject: [PATCH] fix(settings): expose SuperAdmin feature flags to customer get_settings Menu gates like enable_product_funds were missing from the public API, so the user app could not hide disabled features. Co-authored-by: Cursor --- .../Controllers/Admin/SettingsController.php | 14 ++++++++++++- app/Models/Setting.php | 4 ++++ .../SuperAdminProgramSettingsOverlay.php | 21 +++++++++++++++++++ .../sql/settings_menu_and_show_to_user.sql | 1 + 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index 07131ec..0f96372 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -56,9 +56,14 @@ class SettingsController extends Controller return response()->json([]); } + $clientFeatureKeys = SuperAdminProgramSettingsOverlay::CLIENT_FEATURE_KEYS; + $local = Setting::query() ->select(Setting::adminSelectColumns()) - ->where('show_to_user', 1) + ->where(function ($query) use ($clientFeatureKeys) { + $query->where('show_to_user', 1) + ->orWhereIn('key', $clientFeatureKeys); + }) ->orderBy('key') ->get(); @@ -407,6 +412,13 @@ class SettingsController extends Controller $setting->show_to_user = $local->show_to_user; } } + // دسترسی‌های منوی اپ کاربر همیشه به کلاینت می‌رسند (حتی اگر local show_to_user=0 یا absent) + if ( + Setting::hasShowToUserColumn() + && SuperAdminProgramSettingsOverlay::isClientFeatureKey((string) $setting->key) + ) { + $setting->show_to_user = 1; + } return $setting; } diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 7052400..564083d 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -117,6 +117,10 @@ class Setting extends Model return false; } + if (\App\Services\SuperAdminProgramSettingsOverlay::isClientFeatureKey($key)) { + return true; + } + $flag = is_array($row) ? ($row['show_to_user'] ?? 0) : ($row->show_to_user ?? 0); return $flag === true || $flag === 1 || $flag === '1'; diff --git a/app/Services/SuperAdminProgramSettingsOverlay.php b/app/Services/SuperAdminProgramSettingsOverlay.php index b90a2dd..c5d06e7 100644 --- a/app/Services/SuperAdminProgramSettingsOverlay.php +++ b/app/Services/SuperAdminProgramSettingsOverlay.php @@ -39,6 +39,22 @@ class SuperAdminProgramSettingsOverlay 'show_to_users_chat', ]; + /** + * دسترسی‌های سوپرادمین که منو/مسیر اپ کاربر را کنترل می‌کنند. + * باید همیشه در api/get_settings مشتری برسند (show_to_user). + */ + public const CLIENT_FEATURE_KEYS = [ + 'enable_conditional_order', + 'enable_product_funds', + 'has_page_earn_money', + 'has_page_gift_card', + 'has_page_notification', + 'has_page_price_trigger', + 'jibit_enabled', + 'permision__enabled', + 'show_to_users_chat', + ]; + /** کلیدهایی که هنوز صفحهٔ اختصاصی ادمین خانگی مالک‌شان است — از overlay دور انداخته می‌شوند */ public const LOCAL_OWNED_KEYS = [ 'tracking_systems', @@ -291,4 +307,9 @@ class SuperAdminProgramSettingsOverlay { return in_array(trim($key), self::SUPERADMIN_OWNED_KEYS, true); } + + public static function isClientFeatureKey(string $key): bool + { + return in_array(trim($key), self::CLIENT_FEATURE_KEYS, true); + } } diff --git a/database/sql/settings_menu_and_show_to_user.sql b/database/sql/settings_menu_and_show_to_user.sql index e24a24c..a66d3df 100644 --- a/database/sql/settings_menu_and_show_to_user.sql +++ b/database/sql/settings_menu_and_show_to_user.sql @@ -105,6 +105,7 @@ UPDATE `settings` SET `show_to_user` = 1 WHERE `key` IN ( 'fee_deduct_from_gold', 'fee_service_charge_percentage', 'has_chat', + 'has_page_earn_money', 'has_page_gift_card', 'has_page_notification', 'has_page_price_trigger',