ADD EV3-431 Profitcenter - betűkód phase3 addd feature flag seeder

This commit is contained in:
E98Developer 2026-08-09 06:44:25 +02:00
parent 259df71c7b
commit a6b11d2178
2 changed files with 45 additions and 0 deletions

View File

@ -22,6 +22,16 @@ ### 3. Átállás és Modernizáció
- **Auditálás**: Használd a `BaseAuditable` osztályt minden új modellnél a konzisztens követhetőség érdekében.
- **Refaktorálás**: Ha egy legacy kontroller/nézet jelentős átalakítást igényel, javasold annak áthelyezését egy Filament Resource-ba.
# Feature flag rendszer (Laravel Pennant)
Az alkalmazásban deploy nélkül, admin felületről (`/admin/feature-flags`) ki/bekapcsolható funkciókhoz a `laravel/pennant` csomagra épülő, saját `feature_flags`/`feature_flag_overrides` táblákkal kiegészített rendszer van. Új feature flag bevezetésekor vagy a rendszer módosításakor:
- **NE** írj kézzel új `Feature::define()` hívást — a `FeatureFlagRegistrar::registerAll()` (hívva: `AppServiceProvider::boot()`) automatikusan regisztrálja az admin felületen létrehozott flageket.
- **NE** használd a Pennant saját tárolóját (`Feature::for($user)->activate()`) tartós, admin felületről törölhetetlen felhasználói döntésekhez — a `Feature::purge()` egy adott flag nevére **minden** scope-ot (minden felhasználó feloldását) töröl. Az explicit egyéni felülbírálásokat ezért a saját `feature_flag_overrides` tábla (`FeatureFlagOverride` modell) tárolja, amit a resolver néz meg elsőként, mielőtt a szabály-alapú (enabled/stage/role) logikára térne.
- `FeatureFlagOverride` (vagy bármi, ami Pennant-cache-invalidáló Observerrel rendelkezik) módosítása mindig **model-instance-on keresztül** történjen (`$model->save()`/`$model->delete()`), soha ne query builder `->update()`/`->delete()`-tel — csak az előbbi váltja ki az Eloquent modell-eseményeket, amikre az Observerek épülnek.
- A `FeatureFlagAdmin` nevű flag saját magát a feature flag admin felületet védi (`FeatureFlagPolicy`/`FeatureFlagOverridePolicy` → `Feature::for($user)->active('FeatureFlagAdmin')`) — jelenleg kizárólag `developer` szerepkör éri el, minden stage-en.
- Teljes technikai leírás (architektúra, talált hibák, tesztelési minták): `storage/app/private/docs/feature-flag-rendszer.md`.
# Projekt-specifikus szabályok
- **API válaszok**: Használd a `flugger/laravel-responder` csomagot (`responder()` helper) minden API válaszhoz. Kövesd az `OrderController.php`-ban látható mintát.

View File

@ -0,0 +1,35 @@
<?php
namespace Database\Seeders;
use App\Models\FeatureFlag;
use App\Models\Role;
use Illuminate\Database\Seeder;
class FeatureFlagSeeder extends Seeder
{
/**
* A "developer" role és a "FeatureFlagAdmin" flag nélkül a feature flag
* admin felület (/admin/feature-flags) senki számára nem elérhető - a
* FeatureFlagPolicy/FeatureFlagOverridePolicy ezt a flaget nézi, egy
* ismeretlen (még nem seedelt) flag pedig mindenkinek inaktívnak számít.
*/
public function run(): void
{
Role::firstOrCreate(
['name' => 'developer'],
['display_name' => 'Developer', 'description' => 'Fejlesztői jogosultság'],
);
FeatureFlag::updateOrCreate(
['name' => 'FeatureFlagAdmin'],
[
'label' => 'Feature flag admin felület',
'description' => 'A feature flag admin felület (/admin/feature-flags) elérését szabályozza. Enélkül senki nem éri el a felületet.',
'enabled' => true,
'stages' => null,
'roles' => ['developer'],
],
);
}
}