value('value') ?? $default; }); } public static function set(string $key, ?string $value): void { static::where('key', $key)->update(['value' => $value]); Cache::forget("setting.{$key}"); } public static function clearCache(): void { $keys = static::pluck('key'); foreach ($keys as $key) { Cache::forget("setting.{$key}"); } } /** * Prüft ob ein Feature global aktiviert ist (Master-Schalter). */ public static function isFeatureEnabled(string $feature): bool { return static::get("feature_{$feature}", '1') === '1'; } /** * Prüft ob ein Feature für den gegebenen User sichtbar ist. * Prüft zuerst den globalen Schalter, dann die Rollen-Sichtbarkeit. * Admin sieht alles, solange das Feature global aktiviert ist. */ public static function isFeatureVisibleFor(string $feature, User $user): bool { if (!static::isFeatureEnabled($feature)) { return false; } if ($user->isAdmin()) { return true; } $key = "visibility_{$feature}_{$user->role->value}"; return static::get($key, '1') === '1'; } }