> Źródło: https://redai.pl/dev/trasy-i-bramki-dostepu/ (dokumentacja modułów portalu redAi). Cała dokumentacja w jednym pliku: https://redai.pl/dev/moduly.md

## Trasy i bramki dostępu

`trasy.php` to zwykły plik tras Laravela. Portal sam dokłada do każdej trasy:

- logowanie,
- bramkę `module:tools` i `tool:<klucz>`: moduł musi być włączony na instancji, a osoba musi mieć do niego dostęp. Kto nie ma dostępu, trafia na listę narzędzi z komunikatem,
- prefiks adresu (`trasy.prefiks`) i przedrostek nazw (`trasy.nazwy`).

```php
<?php

use Illuminate\Support\Facades\Route;
use Narzedzia\FakturyKosztowe\FakturyController;

Route::get('/', [FakturyController::class, 'index'])->name('index');      // faktury_kosztowe.index = ekran startowy
Route::post('/', [FakturyController::class, 'store'])->name('store');
Route::get('/{faktura}', [FakturyController::class, 'show'])->name('show');
```

- Kontrolery trzymacie w `src/` (`extends App\Http\Controllers\Controller`).
- Bez trasy startowej (`<nazwy><start>`, domyślnie `<klucz>.index`) moduł nie pokaże się na liście narzędzi.
- W kontrolerze sprawdzacie tylko własne reguły rekordów, np. `abort_unless($rekord->mozeEdytowac($user), 403)`. Włączenia i dostępu osób nie sprawdzacie, robi to bramka.
- `\App\Support\Narzedzia::zarzadza($user)` mówi, czy osoba zarządza narzędziami (zwykle administrator, widzi wszystkie rekordy).

**Kto ma dostęp.** Administrator instancji w **Administracja › Moduły › <moduł>** włącza moduł i wybiera, kto może z niego korzystać: wszyscy albo wybrane osoby i grupy. Każda osoba z dostępem może jeszcze przypiąć moduł do swojego menu po lewej.

**Trasy bez logowania.** Plik `trasy-publiczne.php` (np. webhook, podgląd dla klienta). Tu portal dokłada tylko przedrostek nazw. O dostępie i limitach decydujecie sami:

```php
<?php

use Illuminate\Support\Facades\Route;
use Narzedzia\FakturyKosztowe\WebhookController;

Route::post('/webhook/faktury-kosztowe', [WebhookController::class, 'przyjmij'])
    ->middleware('throttle:30,1')
    ->name('webhook');
```

Krótkie adresy `/<adres>` (jak strony i formularze) robicie hakiem `pokazAdres`, nie własną trasą `/{cos}`.

